我正在尝试通过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行的错误文件描述符。
答案 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
并将输出添加到您的问题中。