テキストファイルとして保存された電子メールを解析し、Perlを使用して添付ファイルを取得/保存できますか?

StackOverflow https://stackoverflow.com/questions/4306056

質問

私はPerl&を使用しています メール:: imapclient Gmail ASからメールを保存するには .txt IMAPClientメソッドを使用したファイル:

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

添付ファイルを個別に保存する方法が見つかりません。解析を介してこれを行う方法はありますか?

役に立ちましたか?

解決

あなたがそこに持っているのは、mimeエンコードされた電子メールメッセージの生のテキストです。ほとんどの言語には、これらを解析するための汎用MIMEライブラリがあります。 CPANで簡単に検索すると、それが明らかになりますmime ::パーサー トリックをするかもしれません:

use MIME::Parser;

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

$entity->dump_skeleton;

これにより、プレーンテキストファイルTest.txtに /var /tmpに保存されている電子メールのさまざまな部分がダンプされます。さらなるオプションについては、Mime :: Parser Docsをご覧ください。

他のヒント

これは回避策の提案です。ヘッダーを過ぎた後、このロジックに関与します。

use MIME::Base64;

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

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

ノート: :Mime Multi-Partフォームがどのように機能するかを知っていると当然のことながら、プログラムで仕切りを取得する方法については話しません '--0015174c1274ee7ca60495ca69d5--'.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top