1

我正在尝试通过 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 关闭让我感到困惑。

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

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

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

4

1 回答 1

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并将输出添加到您的问题。

于 2014-07-12T05:50:21.507 回答