Я пытаюсь сделать следующее:
- Войдите в систему моего провайдера электронной почты.
- Загрузите последнее письмо с вложением в формате PDF.
- Расшифруйте файл PDF и сохраните его в файл.
Моя проблема : Когда я открываю PDF (Adobe Reader, IE, Foxit Reader ...), он открывается как пустойлист.
Если я открою файл в текстовом редакторе и сравню его с тем же файлом, который я скачал вручную с помощью веб-клиента, единственная разница - это новая строка в середине файла.
Даже если я удалю эту новую строку, я все равно стану пустым листом.И оба файла имеют одинаковое содержимое, и оба открываются как ANSI в текстовом редакторе.
Это код, который я использовал до сих пор:
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: исходный код электронной почтывыглядит так:
--=_4e399e1756412414214821321834
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="my_file-2018-06-08.pdf"
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGlh
Qm94IFEuODkwXQovVHJpbUJveCBbMCDAgNTk1LjI4MCA4ND4wMDAgMC4wMDAgNTk1LjI4MCA4
...