我已经阅读了3年前在这里发布的内容->如何从Perl读取Gmail帐户中的消息?
但是我无法打开身体。。我已经阅读了Net::IMAP::Simple和Email::Simple。我正在尝试这个。。但不起作用,它打印的是背景和主题,但不是身体。
use strict;
use warnings;
# required modules
use Net::IMAP::Simple;
use Email::Simple;
use IO::Socket::SSL;
# fill in your details here
my $username = 'email@gmail.com';
my $password = 'pass';
my $mailhost = 'imap.gmail.com';
# Connect
my $imap = Net::IMAP::Simple->new(
$mailhost,
port => 993,
use_ssl => 1,
) || die "Unable to connect to IMAP: $Net::IMAP::Simple::errstrn";
# Log in
if ( !$imap->login( $username, $password ) ) {
print STDERR "Login failed: " . $imap->errstr . "n";
exit(64);
}
# Look in the INBOX
my $nm = $imap->select('INBOX');
# How many messages are there?
my ($unseen, $recent, $num_messages) = $imap->status();
print "unseen: $unseen, recent: $recent, total: $num_messagesnn";
## Iterate through unseen messages
for ( my $i = 1 ; $i <= $nm ; $i++ ) {
if ( $imap->seen($i) ) {
next;
}
else {
my $es = Email::Simple->new( join '', @{ $imap->top($i) } );
my $text = $es->body;
printf( "[%03d] %snt%sn%s", $i, $es->header('From'), $es->header('Subject'),$text);
}
}
# Disconnect
$imap->quit;
exit;
此打印:
[001] <example@example.com>
test subject
不是电子邮件正文。
有人能解决这个问题吗???
提前谢谢。
问题是您正在使用:
$imap->top($i)
来自文件(强调矿):
此方法接受消息编号作为其必需参数。那个将从当前选定的文件夹中检索邮件。在…上success此方法返回一个列表引用,其中包含标头。失败和errstr()错误时不返回任何内容处理程序设置有错误消息。
top
不返回消息的正文。为此,您需要使用get
。类似这样的东西:
my $es = Email::Simple->new( join '', @{ $imap->get($i) } );
^^^