我正在尝试通过SSL发送包含Perl的电子邮件。基于示例,我遇到的最佳软件包是Net :: SMTP :: SSL。这似乎是标准。不幸的是,构造函数总是为我返回undef
:
my $smtp = Net::SMTP::SSL->new('smtp.server.com', Port => 25, Debug => 1);
我已经使用基本相同的.NET应用程序验证,重新验证并重新验证了服务器名称和端口号。使用.NET应用程序一切正常,所以我没有看到为什么我应该在连接到smtp服务器时遇到问题。
如果模块提供某种调试信息,那将非常有用,但$!
空白。是否有任何解释为什么$smtp
变量未定义?或者有什么方法可以从构造函数调用中找到一些有用的调试信息吗?
编辑:是的,我知道端口25是一个与SSL一起使用的奇怪端口。我不知道为什么选择这个端口,但这是正在使用的端口。不幸的是,我受到时间的限制,除了尝试调试cpan模块之外,我更容易用其他技术来解决这个问题。谢谢大家的帮助。
答案 0 :(得分:3)
Net::SMTP::SSL使用Net::SMTP来完成其工作。在new
子查看source中的Net :: SMTP时,会返回undef
以查找许多错误情况。首先,您可以在调试器中单步执行此函数调用,或者在整个代码中手动填充print语句,以查看在bailing之前获取的内容。
另外,检查您是否安装了IO::Socket::SSL - 这用于网络操作。如果您使用cpan
客户端安装了模块,那么您应该拥有它,但是像rpm这样的其他软件包管理器有时会搞乱依赖链。
我还会检查你是否有正确的端口:Net :: SMTP :: SSL的文档说:
由于Net :: SMTP的
new
方法的性质,它不会被覆盖以使用SMTPS服务的默认端口。或许未来的版本会像那样聪明。端口465通常是您想要的,指定它并不痛苦。