--- Hello, this is just a RFC, because I can't think of any elegant way to address the issue, given the shortcomings of the RMail API. Please read the lengthy comment in the patch, and let me know if anybody has any ideas about this issue.
P.S.: I've created a "sup-dato" repository in Gitorious, in case that's helpful. Should I be creating merge requests? lib/sup/crypto.rb | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-) diff --git a/lib/sup/crypto.rb b/lib/sup/crypto.rb index 8ec277b..6ef0c0e 100644 --- a/lib/sup/crypto.rb +++ b/lib/sup/crypto.rb @@ -132,8 +132,25 @@ class CryptoManager end end + # This is gross. The decrypted payload could very well be a multipart + # element itself, as opposed to a simple payload; for example, a + # multipart/signed element, like Mutt does when encrypting and signing a + # message (instead of clearsigning it). Supposedly, decrypted_payload + # being a multipart element ought to work out nicely because in + # Message::multipart_encrypted_to_chunks() the decrypted message is run + # though message_to_chunks() again to get any children. However, it does + # not work as intended because this inner payload need not carry a + # MIME-Version header, yet they are fed to RMail as a top-level message, + # for which the MIME-Version header is required, which causes for the + # part not to be detected as multipart. If we detect this is happening, + # force the payload to be interpreted as MIME. + msg = RMail::Parser.read(decrypted_payload) + if msg.header.content_type =~ %r{^multipart/} and not msg.multipart? + decrypted_payload = "MIME-Version: 1.0\n" + decrypted_payload + msg = RMail::Parser.read(decrypted_payload) + end notice = Chunk::CryptoNotice.new :valid, "This message has been decrypted for display" - [RMail::Parser.read(decrypted_payload), sig, notice] + [msg, sig, notice] else notice = Chunk::CryptoNotice.new :invalid, "This message could not be decrypted", output.split("\n") [nil, nil, notice] -- 1.6.3.3 _______________________________________________ sup-talk mailing list sup-talk@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-talk