我正在使用Perl& MAIL::IMAPClient使用IMAPClient方法将来自Gmail的电子邮件保存为.txt
个文件:
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--
我找不到任何单独保存附件的方法。有没有办法通过解析来做到这一点?
答案 0 :(得分:2)
您所拥有的是MIME编码的电子邮件的原始文本。大多数语言都有一个通用的MIME库来解析这些。快速搜索CPAN可以发现这一点 MIME::Parser可能会做到这一点:
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文档以获取更多选项。
答案 1 :(得分:1)
这是一种解决方法的建议。在经过标题后,您将使用此逻辑。
use MIME::Base64;
my $attachlines = '';
while ( <$input> ) {
last if index( $_, '--0015174c1274ee7ca60495ca69d5--' ) == 0;
$attachlines .= $_;
}
my $attach = MIME::Base64::decode( $attachlines );
注意:我理所当然地知道MIME多部分表单是如何工作的,所以我不讨论如何以编程方式获取分隔符'--0015174c1274ee7ca60495ca69d5--'
。