【问题标题】:Laravel Mail via smtp Timeout ErrorLaravel 邮件通过 smtp 超时错误
【发布时间】: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.commike@other.com 工作正常,但是一旦您尝试发送到jack@specific.comjill@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


【解决方案1】:

对于 Gmail,将驱动程序从 smtp 更改为 sendmail。我一直在为此挠头将近一个小时,直到我偶然发现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2019-05-11
    • 2014-12-30
    • 2014-03-16
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多