commit 05a863b71c4ea43f3af8156f0fe1045c7229e438
parent af10b0fcdd1a192f7bec9c116f677a1bd93bb760
Author: Michael Stapelberg <michael@stapelberg.de>
Date: Sat, 5 Jun 2010 00:13:54 +0200
Decode messages according to their Content-Transfer-Encoding
This is necessary for MIME-messages (for example as part of multipart/signed)
which are encoded in base64.
Diffstat:
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -459,8 +459,21 @@ private
chunks
elsif m.header.content_type && m.header.content_type.downcase == "message/rfc822"
+ encoding = m.header["Content-Transfer-Encoding"]
if m.body
- payload = RMail::Parser.read(m.body)
+ body =
+ case encoding
+ when "base64"
+ m.body.unpack("m")[0]
+ when "quoted-printable"
+ m.body.unpack("M")[0]
+ when "7bit", "8bit", nil
+ m.body
+ else
+ raise EncodingUnsupportedError, encoding.inspect
+ end
+ body = body.normalize_whitespace
+ payload = RMail::Parser.read(body)
from = payload.header.from.first ? payload.header.from.first.format : ""
to = payload.header.to.map { |p| p.format }.join(", ")
cc = payload.header.cc.map { |p| p.format }.join(", ")