diff options
-rw-r--r-- | lib/attachment.go | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/attachment.go b/lib/attachment.go index 4dd3f41d..63b8f161 100644 --- a/lib/attachment.go +++ b/lib/attachment.go @@ -90,6 +90,8 @@ func (fa *FileAttachment) WriteTo(w *mail.Writer) error { // setting the filename auto sets the content disposition ah.SetFilename(filename) + fixContentTransferEncoding(mimeType, &ah) + aw, err := w.CreateAttachment(ah) if err != nil { return errors.Wrap(err, "CreateAttachment") @@ -127,6 +129,8 @@ func (pa *PartAttachment) WriteTo(w *mail.Writer) error { // setting the filename auto sets the content disposition ah.SetFilename(pa.Name()) + fixContentTransferEncoding(pa.part.MimeType, &ah) + aw, err := w.CreateAttachment(ah) if err != nil { return errors.Wrap(err, "CreateAttachment") @@ -174,3 +178,15 @@ func FindMimeType(filename string, reader *bufio.Reader) (string, map[string]str // so we need to break them apart before passing them to the headers return mime.ParseMediaType(mimeString) } + +// fixContentTransferEncoding checks the mime type of the attachment and +// corrects the content-transfer-encoding if necessary. +// +// It's expressly forbidden by RFC2046 to set any other +// content-transfer-encoding than 7bit, 8bit, or binary for +// message/rfc822 mime types (see RFC2046, section 5.2.1) +func fixContentTransferEncoding(mimeType string, header *mail.AttachmentHeader) { + if strings.ToLower(mimeType) == "message/rfc822" { + header.Add("Content-Transfer-Encoding", "binary") + } +} |