diff options
author | Leszek CimaĆa <ernierasta@zori.cz> | 2019-12-06 15:28:34 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-12-07 14:30:20 -0500 |
commit | 30aa77c1c975e7fa25e202add14971d4077cc9e1 (patch) | |
tree | b607c00361f967f76f884a2835f96ec9f3c2c244 /commands/msg | |
parent | 0a1a75aed17e56c32cb0283e1b9f1978bd52fd7f (diff) |
use correct headers for message part
Hello guys,
on the hunt for bugs related to wrong encoding. This patch is fixing
reply to non-utf8 messages.
We were using global message headers instead of part specific. In
practice header were often something like:
multipart; boundry=...
where there should be:
text/plain; charset=...
Fixed also missing SubType.
Have great weekend!
Leszek
Diffstat (limited to 'commands/msg')
-rw-r--r-- | commands/msg/reply.go | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/commands/msg/reply.go b/commands/msg/reply.go index b13e254..359c5dd 100644 --- a/commands/msg/reply.go +++ b/commands/msg/reply.go @@ -157,10 +157,38 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error { store.FetchBodyPart(msg.Uid, []int{1}, func(reader io.Reader) { header := message.Header{} - header.SetText( - "Content-Transfer-Encoding", msg.BodyStructure.Encoding) - header.SetContentType(msg.BodyStructure.MIMEType, msg.BodyStructure.Params) - header.SetText("Content-Description", msg.BodyStructure.Description) + if len(msg.BodyStructure.Parts) > 0 { + partID := 0 // TODO: will we always choose first msg part? + header.SetText( + "Content-Transfer-Encoding", msg.BodyStructure.Parts[partID].Encoding) + if msg.BodyStructure.Parts[partID].MIMESubType == "" { + header.SetContentType( + msg.BodyStructure.Parts[partID].MIMEType, + msg.BodyStructure.Parts[partID].Params) + } else { + // include SubType if defined (text/plain, text/html, ...) + header.SetContentType( + fmt.Sprintf("%s/%s", msg.BodyStructure.Parts[partID].MIMEType, + msg.BodyStructure.Parts[partID].MIMESubType), + msg.BodyStructure.Parts[partID].Params) + } + header.SetText("Content-Description", msg.BodyStructure.Parts[partID].Description) + } else { // Parts has no headers, so we use global headers info + header.SetText( + "Content-Transfer-Encoding", msg.BodyStructure.Encoding) + if msg.BodyStructure.MIMESubType == "" { + header.SetContentType( + msg.BodyStructure.MIMEType, + msg.BodyStructure.Params) + } else { + // include SubType if defined (text/plain, text/html, ...) + header.SetContentType( + fmt.Sprintf("%s/%s", msg.BodyStructure.MIMEType, + msg.BodyStructure.MIMESubType), + msg.BodyStructure.Params) + } + header.SetText("Content-Description", msg.BodyStructure.Description) + } entity, err := message.New(header, reader) if err != nil { // TODO: Do something with the error |