为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2021-12-24 09:45:20
我正在尝试使用 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(电子邮件客户端)中使用相同的设置可以工作:我可以在 Thunderbird 中使用这些设置发送电子邮件。(来自我试图使用 swiftmailer 的同一个系统)那么我该如何调试呢?是否有一些我需要在 swiftmailer 中更改的默认设置才能使其工作?有什么方法可以获得更多调试信息吗?我的 SMTP 服务器甚至不记录身份验证尝试。这就像 swiftmailer 甚至没有尝试连接到我的 smtp 服务器!更新:我尝试使用Swift_Plugins_LoggerPlugin获取更多调试信息,但没有帮助:++ 启动 Swift_SmtpTransport!! 预期响应代码 220,但得到一个空响应(代码:0)
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞


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 上打开了一个问题,但问题已经在“打开”状态。所以我不是唯一一个被这个咬的人。😛


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信