Windows 没有包含Mail::IMAPClient的电子邮件内容
这就是我如何使用Windows 没有包含Mail::IMAPClient的电子邮件内容,windows,perl,imap,Windows,Perl,Imap,这就是我如何使用Mail::IMAPClient sub connectGMail { my $socket = IO::Socket::SSL->new ( PeerAddr => 'imap.gmail.com', PeerPort => 993, SSL_verify_mode => SSL_VERIFY_NONE ) or die "socket(): $@";
Mail::IMAPClient
sub connectGMail
{
my $socket = IO::Socket::SSL->new
(
PeerAddr => 'imap.gmail.com',
PeerPort => 993,
SSL_verify_mode => SSL_VERIFY_NONE
)
or die "socket(): $@";
my $client = Mail::IMAPClient->new
(
User => 'whateverUser',
Password => 'aG00dP455w0rd'
Socket => $socket
)
or die "Cannot connect ($@)\n";
return $client;
}
然后我将这个客户机对象传递给processEmails
子例程
sub processEmails
{
my $client = shift;
if ($client->IsAuthenticated())
{
$client->select('Pruebas');
my @messages = $client->messages();
my $mime_parser = getMIMEParser();
my $filer = MIME::Parser::FileInto->new();
mkdir(EXTRACT_DIR);
for(@messages)
{
my $msg_body = $client->message_string($_);
my $msg_subject = Encode::decode('MIME-Header', $client->subject($_));
if ($msg_body)
{
my $dir = EXTRACT_DIR . "/" . $msg_subject;
$filer->init($dir);
mkdir($dir);
$mime_parser->filer($filer);
my $ok = parseEmail($mime_parser, $msg_body);
if ($ok)
{
print(STDERR "Email \"$msg_subject\" parsed OK\n");
}
}
else
{
print(STDERR "No body for message with subject $msg_subject\n");
}
}
}
else
{
print(STDERR "Something nasty happened\n");
}
}
问题是所有消息的$msg\u body
(使用检索)都为空,但$msg\u subject
是正确的,这意味着连接正常。以下是输出:
No body for message with subject íQuÚ pasa!
No body for message with subject Prueba con formateo HTML
一般来说,我认为如果您尝试包含一个可运行的代码示例,这将非常有用 我对你的代码做了一点修改,对我来说,它工作得非常好。我的代码库中有非常相似的代码
use Mail::IMAPClient;
use MIME::Parser::Filer;
my $client = Mail::IMAPClient->new(
Server => 'imap.gmail.com',
User => 'test@gmail.com',
Password => 'test-pass',
Ssl => 1,
Uid => 1,
) or die "Cannot connect ($@)\n";
$client->select('INBOX');
my @messages = $client->messages();
my $filer = MIME::Parser::FileInto->new();
print "There are " . scalar @messages . " messages waiting.\n";
for (@messages) {
print "Processing...\n";
my $msg_body = $client->message_string($_);
my $msg_subject = Encode::decode( 'MIME-Header', $client->subject($_) );
if ($msg_body) {
print "$msg_body\n";
print( STDERR "Email \"$msg_subject\" parsed OK\n" );
}
else {
print( STDERR "No body for message with subject $msg_subject\n" );
}
}
遇到了相同的问题,并能够通过以下方式解决此问题:
$client->Ignoresizeerrors(1)
尝试$client->body\u string($\u)
而不是message\u string()
这样做,但是我也需要头来用MIME::Parser
解析它。标题很混乱,我编辑了它。我不知道getMIMEParser()
和parseEmail()
在做什么。你看过Mail::IMAPClient
中的parse_headers()
方法了吗?但是我需要解析整个电子邮件,而不仅仅是邮件头,否则我将无法获得附件。顺便说一句,这在Linux中可以正常工作(甚至不需要处理连接上的套接字)。它应该有助于定位问题(错误的IMAP命令、错误的IMAP回复、错误的IMAP回复处理)。感谢您的时间,我会在有时间时尝试测试:)