如何解决Swift_TransportException连接到ssl Timed Out错误?

时间:2017-03-21 04:23:45

标签: yii2 swiftmailer

我在使用Yii发送电子邮件时出现问题,问题是有时会导致ssl超时,但有时邮件发送顺利。

错误说的是这样的

 Swift_TransportException

 Connection to ssl://in-v3.mailjet.com:465 Timed Out

这是错误图片

SSL Timed Out

阅读一些文章之后,看起来因为socket超时所以它应该再次启动套接字。

这是我读过的文章。

swiftmailer and Yii2 not working 1 out of 10 time

How to close Smtp connection in SwiftMailer

以下是common\config\main-local.php

中的配置
'mail' => [
  'class' => 'yii\swiftmailer\Mailer',
  'viewPath' => '@backend/mail',
  'useFileTransport' => false,
  'transport' => [
      'class' => 'Swift_SmtpTransport',
      'host' => 'in-v3.mailjet.com',
      'username' => 'myUserName',
      'password' => 'myS3cr3tP4ss',
      'port' => '465',
    'encryption' => 'ssl',
  ],
],

以下是我在控制器中发送电子邮件的方式

$message = Yii::$app->mail->compose();
if (Yii::$app->user->isGuest) {
  $message->setFrom('from@domain.com');
} else {
  $message->setFrom(Yii::$app->user->identity->email);
}
$message->setTo(Yii::$app->params['adminEmail'])
->setFrom(Yii::$app->params['adminEmail'])
->setTo($model->email)
->setSubject('Reset Password')
->setHtmlBody($this->renderAjax('//email/_content',['content' => 'email content goes here']))
->send();
return $this->render('confirmation_sent');

如何停止并开始与上述代码建立连接?

我已将此代码准确地放在$message

之前
if (Yii::$app->mailer->getTransport()->isStarted()) {
    Yii::$app->mailer->getTransport()->stop();
}
Yii::$app->mailer->getTransport()->start();

但有时它仍显示SSL time out

我向mailjet询问此问题,并得到了此回复

Hi, Thank you for your reply.
Ok, please try with port 443 with SSL or: 25,80, 2525 with no encryption, 587 and 588 with TLS.
Let me know if it works.

已经尝试使用给定加密的所有端口,但它保持不变,有时我遇到Timed Out

已更新

使用try catch有时会给我Failed to authenticate on SMTP server with username "a3027c30a1c1f6f60d2f9d7813360b46" using 3 possible authenticators1

使用try catch也会给我Connection to ssl://in-v3.mailjet.com:465 Timed Out,它会显示出来。

这是我从服务器到mailjet的traceroute

traceroute to in-v3.mailjet.com (37.59.74.234), 30 hops max, 60 byte packets
 1  gateway (123.231.250.129)  1.084 ms  1.114 ms  3.485 ms
 2  36.37.76.84 (36.37.76.84)  17.495 ms  17.497 ms 36.37.76.70 (36.37.76.70)  1                                                                                                                                                 7.215 ms
 3  36.37.77.68 (36.37.77.68)  30.878 ms 36.37.77.14 (36.37.77.14)  30.322 ms  3                                                                                                                                                 2.661 ms
 4  36.37.77.39 (36.37.77.39)  33.103 ms * *
 5  * * *
 6  * * *
 7  * * gblx.as3549.ny.us (213.251.130.102)  362.627 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

这是因为不同Yii::$app->mailer开始停止套接字而Yii::$app->mail是否发送电子邮件?

我是否正确这些错误,因为ssl socket已停止?请解释一下这个错误是怎么出现的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您遇到错误,因为它无法连接到smtp并且尝试的时间结束了。尝试更改端口和加密,也许这会对你有帮助,但我不确定。这取决于你的n-v3.mailjet.com,他需要什么设置,我不知道。

'mail' => [
  'class' => 'yii\swiftmailer\Mailer',
  'viewPath' => '@backend/mail',
  'useFileTransport' => false,
  'transport' => [
      'class' => 'Swift_SmtpTransport',
      'host' => 'in-v3.mailjet.com',
      'username' => 'myUserName',
      'password' => 'myS3cr3tP4ss',
      'port' => '587',
      'encryption' => 'ssl',
  ],
],