【发布时间】:2015-04-14 23:18:14
【问题描述】:
我试图弄清楚通过 Laravel 的 Mail::... 函数发送的电子邮件发生了什么。电子邮件未发送,我收到以下错误消息:
在 /srv/www/application/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:405 中出现消息“连接到 mail_server:25 超时”的异常“Swift_TransportException”
还有我的app/config/mail.php 设置:
return array(
'driver' => 'smtp',
'host' => 'mail_server',
'port' => 25,
'from' => array('address' => null, 'name' => null),
//'encryption' => 'tls',
'username' => null,
'password' => null,
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
);
一个问题是这通常可以正常工作,但有时我会收到上述错误,而且它似乎只发生在特定域中。例如,将邮件发送到bob@test.com 和mike@other.com 工作正常,但是一旦您尝试发送到jack@specific.com 或jill@specific.com,就会记录超时消息并且邮件不会发送。
这是发送邮件的函数:
$message = "";
$result = Mail::send('templates.email', $form, function($mail) use (&$from_email, &$from_name, &$to_email, &$subject, &$message, &$emails){
$mail->from($from_email, $from_name);
$mail->to($to_email);
if (count($emails)>0)
$mail->cc($emails);
$mail->subject($subject);
$message = $mail->getSwiftMessage();
$message->setCharset('iso-8859-1');
$message->setMaxLineLength(1000);
$message->setContentType('multipart/mixed');
});
我认为这是一个最终用户问题,因为它似乎只发生在几个特定域中,但错误消息表明与我的mail_server 的连接在发送邮件之前就超时了。如果其他人遇到过这个问题,那就太好了。我所有寻找解决方案的尝试都提供了不适用于 Laravel 或这个特定问题的答案。
编辑
注意,从这个 Laravel 应用程序发送的所有邮件都在一个队列中处理,所以过度工作/并发不应该是这里的问题。
【问题讨论】:
-
连接到邮件服务器的超时错误并不少见。大多数邮件服务器(例如 sendmail)一旦太忙就会开始拒绝连接,或者如果它们在给定的时间范围内从同一主机接收到太多连接,甚至会开始拒绝连接。简单的答案是将您的邮件消息放入数据库表中,并使用手工任务来发送它们。如果发送失败,请稍后再试。
-
@delatbabel 一个有效的观点,它让我想起了我忘记添加到问题中的一些内容。从这个 laravel 应用程序发送的所有邮件都在一个队列中处理;也就是说,在这种情况下,我认为邮件服务器过度工作不是问题。我会将此信息编辑到问题中,谢谢。
标签: php email laravel swiftmailer