在Perl中使用Net :: IMAPClient的连接错误

时间:2014-07-12 01:24:35

标签: perl imap imapclient

我正在尝试通过IMAP连接到Outlook电子邮件服务器,我得到的错误很奇怪。以下是我的代码示例:

use Mail::IMAPClient;

my $imap = Mail::IMAPClient->new;
$host='outlook.office365.com';
$username='.....';
$password='.....';
$folder='INBOX';
$imap=Mail::IMAPClient->new(
                Server => $host,
                User => $username,
                Password => $password,
                Port => 993,
                Ssl => 1,
                Clear=> 5,
                Folder => $folder,
                Uid => 0,
)       or die "Cannot connect to $host as $username: $@";

当我运行它时,输出行看起来像这样:

无法连接到outlook.office365.com,因为[...]:从服务器读取数据时Socket已关闭。

更具体地说,从服务器读取数据时关闭Socket 让我感到困惑。

我指定端口993,那么唯一剩下的可能的问题是防火墙到位阻止了这个问题吗?我已经通过电子邮件发送了我的学校(这是一个学校的电子邮件帐户)技术部门(很久以前),他们还没有回来,但希望我很快就会收到他们的回复。

当我删除指定端口的行时,我得到一个更奇怪的错误,我只是希望它包含在某种程度上相关或有用的希望:

无法连接到outlook.office365.com [...]:发送'1登录时出错'baldassaren@wit.edu“{15} [此处显示密码,以及我在此无法强制使用的换行符] '到IMAP:./test.pl第10行的错误文件描述符。

1 个答案:

答案 0 :(得分:1)

请直接查看openssl:

 openssl s_client -connect outlook.office365.com:993

这应该为您提供连接,最后是来自IMAP服务器的欢迎消息:

* OK The Microsoft Exchange IMAP4 service is ready. ....

如果这不起作用,则防火墙会阻止连接。如果这有效,请尝试连接IO :: Socket :: SSL,这是Mail :: IMAPClient用于SSL连接的模块:

perl -MIO::Socket::SSL -e 'print IO::Socket::SSL->new(q[outlook.office365.com:993])->getline.""'

这也应该给你一个欢迎信息。如果没有,证书检查可能会出现问题。在这种情况下,请发布您使用的模块版本和操作系统,例如

perl -e 'print "version=$^V, os=$^O\n"'
perl -MIO::Socket::SSL -e 'print IO::Socket::SSL->VERSION,"\n"'
perl -MMail::IMAPCient -e 'print Mail::IMAPClient->VERSION,"\n"'

但是,如果IO :: Socket :: SSL获得成功连接,请将Debug => 1选项添加到Mail::IMAPClient->new并将输出添加到您的问题中。