2010-11-29 18 views
1

IMAPClientメソッドを使用して.txtファイルとして私は、Gmailからのメールを保存するためのPerl & MAIL::IMAPClientを使用しています:テキストファイルとして保存された電子メールを解析し、Perlを使用して添付ファイルを取得/保存できますか?

message_to_file

は、これらのファイルはテキストとしてエンコードされた電子メールの添付ファイルを含むように見えます。

はここで、テキストファイルの一部です:

--0015174c1274ee7ca60495ca69d5 
Content-Type: video/3gpp; name="20101112233055.3gp" 
Content-Disposition: attachment; filename="20101112233055.3gp" 
Content-Transfer-Encoding: base64 
X-Attachment-Id: 1353288501407252480-1 

AAAAHGZ0eXAzZ3A0AAADADNncDRtcDQxM2dwNgAFHyltZGF0AAABthAwrMK9/Mue7fM+95wsf9P8 
WI7mPzzp/ikijbucv72j7OywVGuh5kBzo89Zra6PihxZg0zadDqihZFpsPJeG36Ihk9qZW+LLQ2u 
NEd96vsqgpnLFnhhwGBWgL2Xpt0cXkW....[A LOT MORE CHARS]....AAAQAAAALAAAAAQAAABRzdHN6 
AAAAAAAAACAAAAChAAAAIHN0Y28AAAAAAAAABAABHNoAASMaAALYFwAFHeU= 
--0015174c1274ee7ca60495ca69d5-- 

私は別に添付ファイルを保存する任意の方法を見つけることができません。解析することでこれを行う方法はありますか?

答えて

2

あなたが持っているのは、MIMEでエンコードされた電子メールメッセージの生のテキストです。ほとんどの言語には、これらを解析するための汎用MIMEライブラリがあります。これは、は/ var/tmpのにプレーンテキストファイルtest.txtのに保存された電子メールのさまざまな部分をダンプします

use MIME::Parser; 

open(FH, '/var/tmp/test.txt'); 
my $parser = new MIME::Parser; 
my $entity = $parser->parse(\*FH) or die; 

$entity->dump_skeleton; 

:CPAN上のクイック検索は MIME::Parserはトリックを行う可能性があることが明らかになりました。さらなるオプションについては、MIME :: Parserのドキュメントを参照してください。

1

これは回避策の提案です。あなたはヘッダーを過ぎた後にこの論理に従事します。

use MIME::Base64; 

my $attachlines = ''; 
while (<$input>) { 
    last if index($_, '--0015174c1274ee7ca60495ca69d5--') == 0; 
    $attachlines .= $_; 
} 

my $attach = MIME::Base64::decode($attachlines); 

は:あなたはMIMEマルチパートフォームがどのように機能するかを知っていることを当たり前の私が取るので、私は、プログラムデバイダ'--0015174c1274ee7ca60495ca69d5--'を取得する方法については説明しません。

+0

はい、私は境界の解析方法を探していました。 – CheeseConQueso

+0

@CheeseConQueso、http://en.wikipedia.org/wiki/MIME#Multipart_messages – Axeman

関連する問題