• ベストアンサー

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 ...

  • Perl
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • 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

  • メール本文に変な文字が

    outlookでメールを送信したら、 本文の前後に ------=_NextPart_000_0008_01C63A76.9E0B9930 Content-Type: text/html Content-Transfer-Encoding: quoted-printable <html xmlns:o=3D"urn:schemas-microsoft- 省略 <p class=3DMsoNormal><font size=3D2 face=3DCentury><span = lang=3DEN-US><o:p>&nbsp;</o:p></span></font></p> </div> </body> </html> ------=_NextPart_000_0008_01C63A76.9E0B9930-- というような文字がついてしまいます。 何か設定がおかしいのでしょうか? どなたかわかるかたがいらっしゃったら教えていただけないでしょうか? パソコンはwindowsXPです。

  • メールから本文だけを取り出す方法

    今、迷惑メールフィルタリングを作成しているのですがメールの本文だけを取り出す方法がわかりません。 本文の前には Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit X-UIDL: B1("!E-U"!Lj<"!Se_"! などが書かれているのですが、これらに規則性がなく文字列処理で取り出すのに苦戦しているところです。 添付ファイルのないメールだと大体X-UIDLで終わっているのですが、 添付ファイルが付いているとメーラーごとに違うのか --Multipart=とあったり--Apple-Mail-5-234401926と書いてあったりします。 メーラーを作成している人ならきっと詳しいと思うのですが、誰か教えていただけませんでしょうか。

  • 本文に入って表示されてしまった添付ファイルを取り出すには?

    添付ファイル付きのメールを友人に送ったのですが、大きすぎるということで、メールサーバーから戻ってきてしまいました。 実は、作成したファイルはHDDの故障ですでに手元になく、なんとかメールから取り出せたらと考えています。 サーバーから戻ったメールは、添付ファイルではなく、本文のあとに、文字列として以下のように表示されています。 --------_41E7706B5CAE04C6C218_MULTIPART_MIXED_ Content-Type: application/octet-stream; (一部略) 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAAygAAAAAAAAAA EAAAzAAAAAEAAAD+////AAAAAMgAAADJAAAA//////////////////////////////////////// AAAAAAAAAAAAAAAAAAAAAAAAAAAA (一部略) --------_41E7706B5CAE04C6C218_MULTIPART_MIXED_-- メール本文から、添付ファイルを取り出す方法はあるでしょうか。 ちなみに、サーバーから戻されたメールは、becky!やoutlook expressなど、メールソフトを変えても添付ファイルとして分離できませんでした。 添付の部分を取り出す方法を教えていただけるとありがたいです。

  • Macから送られてくる添付ファイルがAL-MAILで読めない

    Macユーザから送られてくる添付ファイルが、WindowsのAL-mail32 (ver.1.13b)で読めずに困っています。今読めないのはPDF形式で、そもそも添付ファイルを示すクリップマークがメール画面の下に現れず、吐き出すことができない状態です。 AlmailのInboxフォルダを開けて、テキストエディタで当該メールを開けてみると以下のような状態です。再送してもらう以外、添付ファイルを正しく保存する方法はないでしょうか? -------------------------------------------------- Date: *** To: *** From: *** Subject: *** Mime-Version: 1.0 X-Mailer: QUALCOMM MacOS X Eudora Version 6.2J Content-Type: multipart/mixed; boundary="============_-986941328==_============" --============_-986941328==_============ Content-Type: text/plain; charset="iso-2022-jp" ; format="flowed" Content-Transfer-Encoding: 7bit (本文) --============_-986941328==_============ Content-Id: <***> Content-Type: /ai file; name="******.pdf" ; x-mac-type="50444620" ; x-mac-creator="4341524F" Content-Disposition: attachment; filename="******.pdf" Content-Transfer-Encoding: base64 (以下、意味のない文字の羅列)

  • メール本文をbase64でエンコードする方法

    既存システムとの連携のためにメール本文をbase64でエンコードするというハメになってしまいました。 いくつか試してみたのですが message.setHeader("Content-Transfer-Encoding", "base64");とか message.setContent(MimeUtility.encodeText(Content, "ISO-2022-JP", "B"),"iso-2 022-jp");とかやっても 常にContent-Transfer-Encoding: quoted-printableとなってしまいます。 JAVAmailを使って、添付ファイルではなくメール本文をbase64でエンコードする方法ご存知の方いらっしゃいませんか。

    • ベストアンサー
    • Java
  • 添付ファイル送信方法がわかりません。

    SMTPに接続せずに、メールに画像ファイルを添付したいと考えておりますが、方法がわかりません。私の行っているメール送信方法は、qmail-inject(linux)を直接コールして標準入力から画像ファイルをuuencodeしたテキストデータを入力しております。 本文の下に -----------------------------7d01042be18 Content-Type: image/gif; name="bn_top_r1_c1.gif" Content-Transfer-Encoding: uuencode Content-Disposition: attachment; filename="bn_top_r1_c1.gif" -----------------------------7d01042be18-- によってくくって画像テキストを貼り付けております。 どなたかわかる人がいたらご教授ください。 以上

  • Perlでのメール本文の解析について

    ここで一週間も止まっています、どなたか助けてください。 あるサーバーにたまっているメールを受信して Net::POP3; MIME::Parser; などを利用して本文を取り出したりしています。 件名などはきちんと解析できて日本語にできるのですが、どうしても本文だけはどうなっているのかわかりません。エンコード、デコードなどの説明が書いてあるサイトをたくさんみて200回くらいいろんな方法やパターンを試してみて本文を復元しようと試みましたが 「$B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B」の文字は何も変わることなく、さすがに気が狂いそうになりましたのでここで質問しようとおもいます。 emlで保存したファイルから本文を取り出すことはできますが、読める状態になりません。 どなたか教えていただけないでしょうか? いったい、どうしたらメールの本文をきちんと読める状態にできるのしょう? ========================= Subject: =?ISO-2022-JP?B?GyRCJF4kNyRtPyclNyVzJVUlKSVLITwbKEI=?= To: test@test.com Status: RO X-UIDL: 1358842469.4950.s323,S=1722 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit $B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B

    • ベストアンサー
    • Perl
  • メールの本文が添付ファイルになるのを回避する方法は?

    NetscapeCommunicator 4.78 でメールの受送信を行っています。 受信メールで、メールの本文が添付ファイルになって届く場合があります。添付ファイルをクリックするとブラウザーが起動され本文が読めるようになります。 これらのメールをこちら(受信者)の環境を変更することで、ダイレクトに読める(通常どおり本文として展開される)ように、設定する方法を教えてください。 特定の相手からのメールなので、送信側の問題(HTML形式で送られているのでは?)だと思うのですが、相手が複数名いるため、出来ればこちら(受信者)の環境を変更することで、解決したいと考えております。 添付ファイルは常に、以下のファイル名/Typeです。 ファイル名→Part1.1 Type→Plain Text (text/plain) 以上 方法がありましたら、ご教授ください。 よろしくお願い申し上げます。

  • PC→携帯に送ると出るメッセージ(?)

    たとえば、PC→携帯に送るとき、本文に『あ』と書いて送るとします。 そうすると、 This is a multi-part message in MIME format. ------=_NextPart<___> Content-Type: text/plain Content-Transfer-Encoding: 7bit あ ------=_NextPart<___> Content-Type: text/html Content-Transfer-Encoding: quoted-printable ~~~ *省略 ~~~ *個人情報が書かれているかもしれないので、省略します、必要だったらいってください。 また、個人情報があるかもしれないので数字などは<>としました。 これは一体何なんでしょうか? また、でなくするにはどうすればいいのでしょうか? よろしくお願いします。

  • tar.gzファイルが解凍できない

    さくらのレンタルサーバでCakePHPを動かそうとしています。 http://www.cafechantant.com/blog/2007/09/17/%E3%81%95%E3%81%8F%E3%82%89%E3%81%A7-cakephp/ こちらのサイトを参考にさせていただいて、wgetでcake_1.1.17.5612.tar.gzをダウンロードするところまでできました。 %tar zxvf cake_1.1.17.5612.tar.gz とすると Unrecognized archive format: Inappropriate file type or format と出ます。 %gzip -d ./cake_1.1.17.5612.tar.gz とすると、 %gzip: ./cake_1.1.17.5612.tar.gz: not in gzip format と出ます。どうすれば解凍できるでしょうか。

専門家に質問してみよう