aboutsummaryrefslogtreecommitdiffstats
path: root/lib/attachment.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/attachment.go')
-rw-r--r--lib/attachment.go16
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")
+ }
+}