2013年2月14日木曜日

入れ子になったmultipartメールのデコード

Google App Engineで受信したメールから添付ファイル(画像)を取り出して
それを登録する、というアプリケーションを作っているのだけれど
メーラによって、また送信条件に形式がかわり注意深くデコードしないといけない件。

もちろん、添付されてるメールはmultipartなのだけれど条件により下記になる場合があるみたい。

1. 普通に添付
 multipart/mixedでbodyのどれかに置かれているとき。
 これは普通にGoogleで引っかかる方法でやればいい。
 ポピュラーだと思うので略。
 
2. html形式でtext形式の本文と一緒に送られてきた時。
 multipart/relatedでbodyのどれかに置かれているとき。
 これは1.と同じにやればよい。
 
3. 上記の1,2,が転送されてきたとき
 これはmultipartの入れ子になっている。
 multipartのbodypartにまたmultipartが入っている。
 これはbodypartのContentTypeを調べてそれがmultipartだったら再帰的に処理していけば良い。
 下記みたいにしてMultipartにキャストして処理してやる。

  BodyPart bp = multipart.getBodyPart(i);
 Multipart subMultipart=(Multipart)bp.getContent();

0 件のコメント:

コメントを投稿