2011-01-21 2 views
2

生の8ビット部分を含むMIME電子メールを、7ビット部分のみを含むRFC822準拠のメッセージに変換する最も簡単な方法は何ですか?
部品は自動的に "Content-Transfer-Encoding:quoted-printable"に変換されなければなりません。8bit MIMEメッセージをquoted-printableに変換する

私のアプリはJavaで開発されています。しかし、コマンドラインツールは素晴らしいだろう。私はreformimeを試みたが、このツールはバグだらけだし、JavaMailのは、良い解決策のように思える任意の助け

おかげで、
オリヴィエ

答えて

2

:-(適切にメッセージを書き換えません。あなたのファイルからMimeMessageを作成し、見つけますそのコンテンツ転送エンコーディングあなたは、変更MimeBodyPart.setHeader("Content-Transfer-Encoding", "quoted-printable")を呼び出し、MimeMessage.writeTo()経由結果のメッセージを書きたい体の部分本の線に沿って

何か:。

Session session = Session.getInstance(new Properties()); 
MimeMessage mm = new MimeMessage(new FileInputStream(msgfile)); 
// assuming we know that it's a multipart; otherwise, check Content-Type first... 
MimeMultipart multi = (MimeMultipart) mm.getContent(); 
for (int i = 0; i < multi.getCount(); i++) { 
    MimeBodyPart mbp = (MimeBodyPart) multi.getBodyPart(i); 
    mbp.setHeader("Content-Transfer-Encoding", "quoted-printable"); 
} 
mm.saveChanges(); 
mm.writeTo(new FileOutputStream(outfile)); 

MimeMessageは、メッセージを変更したときにデフォルトでMessage-IDヘッダーをリセットすることに注意してください。これを望まない場合は、MimeMessage.updateMessageID()をノーオペレーションに上書きしてください。

+0

ありがとうございます。 JavaMailのMimeMessageオブジェクトを変更すると、ネストされたMultipartで正常に動作しません。あなたのソリューションでは、一部の部品は更新されますが、一部の部品は更新されません。 JavaMailではよく知られている問題だと思う(http://labs.consol.de/lang/en/blog/java/java-mail/removing-attachments-with-javamail/を参照)。 – Antares

+1

サンプルコードでは、ネストされたマルチパートは処理されません。それはあなたが使用したいかもしれない機能を示すための単なるガイドラインです。あなたは実際に記事で言及された問題を展示する再帰的プログラムを書いたことがありますか?ストリームから解析されたメッセージにはその問題はないはずです... – dkarp

関連する問題