• ベストアンサー

Perlでメール本文と添付ファイルを切り分ける方法?

perlでメールを受信して、添付ファイル部分をファイルにするスクリプトを書こうとしているのですが 知識がなく進めません。 単なるメールの受信は Mail::POP3Clientを使えば、簡単に出来ましたが BODY部で、本文と 添付ファイルを区別して 本文には $honbun 添付ファイル @tenpu({-fname=>ファイル名, -content=>中身ファイル}, ... という風に、簡単にメールボディ部を切り分ける方法やモジュールはあるのでしょうか? 例) This is a multi-part message in MIME format.------=_NextPart_000_000F_01C59927.53E8 B0E0Content-Type: text/plain; format=flowed; charset="iso-2022-jp"; reply-type= originalContent-Transfer-Encoding: 7bit------=_NextPart_000_000F_01C59927.53E8B0E0C ontent-Type: application/octet-stream; name="Tk-800.024.tar.gz"Content-Transfer-En coding: base64Content-Disposition: attachment; filename="Tk-800.024.tar.gz"H4sICBX bhDwCA1RrODAwLjAyNC50YXIA7DxrV9vIkvka/Yq6xBvLQX7ySnDCxRgTvAs2i0weJx ...

質問者が選んだベストアンサー

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

添付ファイル付きのメールは、普通、multipart/mixed とか multipart/form-data の形式になっていると思います。 なので、単純にboundary(デリミタ)で切り分ければいいだけですが、面倒ならMIME::Parserモジュールでも簡単ですね。 複数のファイルが添付されていれば、同じように区切られているだけですが、同じファイル名の場合もあるので注意が必要です。 ちなみに、自分で切り分ける方法をもう少し詳しく書くと、メッセージヘッダの中に「boundary=xxx」なんていうものが書かれているはずですから、これは「xxx」によって区切られている、という意味です。区切ったものは、さらにコンテントヘッダなどが付いていて、続いてボディ部、つまりデータが並んでいます。

その他の回答 (1)

  • geso775
  • ベストアンサー率29% (15/51)
回答No.2

net::pop3など標準なモジュールで添付メールを切り出すのは大変だと思います。 MIMEという、メール処理専門のモジュールがあるので、それを使用することを オススメします。MIMEなら、 mime::parserで解析し、添付メールがファイル切り出されます。

参考URL:
http://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm

関連するQ&A