在 Laravel / swiftmailer 中使用自定义 SMTP 服务器失败

我正在尝试使用 SwiftMailer(这是 Laravel 默认使用的)发送电子邮件:


    $transport = (new Swift_SmtpTransport('smtp.my-server.com', 465, "tls"))

        ->setAuthMode('PLAIN')

        ->setUsername('my-username')

        ->setPassword('my-password');

    $mailer    = new Swift_Mailer($transport);


    $message = (new Swift_Message('Wonderful Subject'))

        ->setFrom(['address@my-domain.com' => 'My Name'])

        ->setTo(['my-gmail-address@gmail.com'])

        ->setBody('Here is the message itself');


    $mailer->send($message);


    echo "\nMail sent! \n\n";

运行这个给我:


预期响应代码 220 但得到一个空响应


在 Thunderbird(电子邮件客户端)中使用相同的设置可以工作:

http://img2.mukewang.com/61c526510001a21b03210304.jpg

我可以在 Thunderbird 中使用这些设置发送电子邮件。(来自我试图使用 swiftmailer 的同一个系统)

那么我该如何调试呢?是否有一些我需要在 swiftmailer 中更改的默认设置才能使其工作?有什么方法可以获得更多调试信息吗?

我的 SMTP 服务器甚至不记录身份验证尝试。这就像 swiftmailer 甚至没有尝试连接到我的 smtp 服务器!

更新:我尝试使用Swift_Plugins_LoggerPlugin获取更多调试信息,但没有帮助:

++ 启动 Swift_SmtpTransport

!! 预期响应代码 220,但得到一个空响应(代码:0)


BIG阳
浏览 270回答 1
1回答

呼唤远方

TLDR;使用ssl而不是tls使用的端口力量时ssl/tls。Swiftmailer的“TLS”其实不是tls,它的starttls。swiftmailer 的“tls”加密选项似乎被贴错标签了!我的服务器只接受ssl/tls端口 465,我可以通过 Thunderbird 连接到它,但 swiftmailer 无法连接。当我切换到仅starttls在我的服务器上支持的端口 587 时,它可以工作,即使加密设置为tls(不应与 相同starttls)。查看源文件证实了我的怀疑:if ($this->params['tls']) {    try {        $this->executeCommand("STARTTLS\r\n", [220]);            ...当它设置为 时tls,它实际上意味着starttls。:P所以如果你想使用ssl/tls,请不要使用 swiftmailer 加密选项“tls”😅当我将加密更改为 时ssl,它在强制执行的端口上工作ssl/tls。所以答案是使用ssl.编辑:我在 swiftmail github 上打开了一个问题,但问题已经在“打开”状态。所以我不是唯一一个被这个咬的人。😛
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript