首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Perl -解码附加在MIMO Base64中的电子邮件的pdf生成一个空的pdf

Perl -解码附加在MIMO Base64中的电子邮件的pdf生成一个空的pdf
EN

Stack Overflow用户
提问于 2018-06-08 22:03:37
回答 1查看 185关注 0票数 1

我正在尝试做以下几件事:

pdf attachment.

  • Decode de
  1. 登录到我的电子邮件
  2. 最后一封电子邮件,并将其保存到一个文件。

My problem:当我打开pdf (Adobe reader,IE,foxit reader...)它将作为一个空工作表打开。

如果我使用文本编辑器打开该文件,并将其与我使用new客户端手动下载的相同文件进行比较,唯一的区别是文件中间有一个新行。

即使我删除了这一新行,我仍然是一张空表。这两个文件具有完全相同的内容,并且都以ANSI格式在文本编辑器中打开。

这是我到目前为止使用的代码:

代码语言:javascript
复制
use strict;
use warnings;
#use utf8;
#use open ':std', ':encoding(UTF-8)';
#binmode(STDOUT, ":utf8");

use Mail::IMAPClient;
use MIME::Base64;

my $imap = Mail::IMAPClient->new(
    Server   => 'myprovider',
    User     => 'myuser',
    Password => 'mypassword',
    Port     => '993',
    Ssl      => 1,
    Uid      => 1,
) or die "Cannot connect: $@";


# Select folder
$imap->select( 'INBOX' ) or die "Select folder error: ", $imap->LastError, "\n";

# Get all messages
my $messages = $imap->messages;

# Read whole message
my $message = $imap->message_string(@$messages[-1]);
print "\n\n\n\nWhole message: \n\n\n$message\n";

# Read message
my $part_body = $imap->bodypart_string(
    @$messages[-1],
    '1.1',
) or die "Could not get bodypart string: ", $imap->LastError;
print "Email content:\n$part_body\n";

# Read attachment
my $pdf_attachment = $imap->bodypart_string(
    @$messages[-1],
    '2.1',
) or die "Could not get bodypart string: ", $imap->LastError;
$pdf_attachment =~ s/-/+/g;
$pdf_attachment =~ s/_/\//g;
my $decoded_attachment = decode_base64($pdf_attachment);


# Logout
$imap->logout or die "Logout error: ", $imap->LastError, "\n";

# Save attachment
open(my $fh, '>', 'mypdf.pdf');
print $fh $decoded_attachment;
close $fh;
print "done\n";

# Save email
open($fh, '>', 'email.txt');
print $fh $message;
close $fh;
print "done\n";

PD:电子邮件源代码如下所示:

代码语言:javascript
复制
--=_4e399e1756412414214821321834

Content-Type: application/octet-stream

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename="my_file-2018-06-08.pdf"



JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGlh

Qm94IFEuODkwXQovVHJpbUJveCBbMCDAgNTk1LjI4MCA4ND4wMDAgMC4wMDAgNTk1LjI4MCA4

...
EN

回答 1

Stack Overflow用户

发布于 2018-06-08 23:38:09

我刚刚发现了问题,我需要使用binmode来保存文件:

代码语言:javascript
复制
open(OUTFILE,">>mypdf.pdf"); 
binmode OUTFILE;
print OUTFILE $decoded_attachment;
close(OUTFILE);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50762413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档