テキストファイルとして保存された電子メールを解析し、Perlを使用して添付ファイルを取得/保存できますか?
-
29-09-2019 - |
質問
私は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--'
.
所属していません StackOverflow