使用带有 Laravel / swiftmailer 的自定义 SMTP 服务器失败,相同的设置在 Thunderbird 中有效
Using custom SMTP server with Laravel / swiftmailer fails, same settings work in Thunderbird
我正在尝试使用 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";
并且 运行 这给了我:
Expected response code 220 but got an empty response
在 Thunderbird(电子邮件客户端)中使用相同的设置有效:
我可以在 Thunderbird 中使用这些设置发送电子邮件。 (来自我尝试使用 swiftmailer 的同一个系统)
那我该如何调试呢?是否需要在 swiftmailer 中更改一些默认设置才能使其正常工作?有什么方法可以获得更多调试信息吗?
我的 SMTP 服务器甚至没有记录身份验证尝试。好像 swiftmailer 甚至没有尝试连接到我的 smtp 服务器!
更新:我尝试使用 Swift_Plugins_LoggerPlugin
获取更多调试信息,但没有帮助:
++ Starting Swift_SmtpTransport
!! Expected response code 220 but got an empty response (code: 0)
TLDR; use ssl
instead of tls
when using a port that forces ssl/tls
. Swiftmailer's "tls" actually isn't tls
, it's starttls
.
似乎 swiftmailer 的 "tls" 加密选项标签错误!我的服务器只接受端口 465 上的 ssl/tls
,我可以通过 Thunderbird 连接到它,但 swiftmailer 不能。
当我切换到端口 587 时,它在我的服务器上仅支持 starttls
,即使加密设置为 tls
(不应与 [=15 相同),它仍然有效=]).
查看源文件证实了我的怀疑:
if ($this->params['tls']) {
try {
$this->executeCommand("STARTTLS\r\n", [220]);
...
设置为tls
时,实际表示starttls
。 :P
所以如果你想使用ssl/tls
,不要使用swiftmailer加密选项"tls"
当我将加密更改为 ssl
时,它在强制执行 ssl/tls
的端口上工作。所以答案是使用ssl
.
编辑:我在 swiftmail github 上打开了一个问题,但是 the issue was already there in "open" status。所以我不是唯一被这个咬伤的人。
我正在尝试使用 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";
并且 运行 这给了我:
Expected response code 220 but got an empty response
在 Thunderbird(电子邮件客户端)中使用相同的设置有效:
我可以在 Thunderbird 中使用这些设置发送电子邮件。 (来自我尝试使用 swiftmailer 的同一个系统)
那我该如何调试呢?是否需要在 swiftmailer 中更改一些默认设置才能使其正常工作?有什么方法可以获得更多调试信息吗?
我的 SMTP 服务器甚至没有记录身份验证尝试。好像 swiftmailer 甚至没有尝试连接到我的 smtp 服务器!
更新:我尝试使用 Swift_Plugins_LoggerPlugin
获取更多调试信息,但没有帮助:
++ Starting Swift_SmtpTransport
!! Expected response code 220 but got an empty response (code: 0)
TLDR; use
ssl
instead oftls
when using a port that forcesssl/tls
. Swiftmailer's "tls" actually isn'ttls
, it'sstarttls
.
似乎 swiftmailer 的 "tls" 加密选项标签错误!我的服务器只接受端口 465 上的 ssl/tls
,我可以通过 Thunderbird 连接到它,但 swiftmailer 不能。
当我切换到端口 587 时,它在我的服务器上仅支持 starttls
,即使加密设置为 tls
(不应与 [=15 相同),它仍然有效=]).
查看源文件证实了我的怀疑:
if ($this->params['tls']) {
try {
$this->executeCommand("STARTTLS\r\n", [220]);
...
设置为tls
时,实际表示starttls
。 :P
所以如果你想使用ssl/tls
,不要使用swiftmailer加密选项"tls"
当我将加密更改为 ssl
时,它在强制执行 ssl/tls
的端口上工作。所以答案是使用ssl
.
编辑:我在 swiftmail github 上打开了一个问题,但是 the issue was already there in "open" status。所以我不是唯一被这个咬伤的人。