来自Advanced Yii 2.0的Swiftmailer不能与gmail一起使用

时间:2015-06-25 00:10:40

标签: yii2 swiftmailer

我试图在高级yii 2.0模板中配置swiftmailer。我已经浏览了很多帖子,我知道gmail存在一些问题。我在开发中的配置环境如下:

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        'useFileTransport' => false,
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => gethostbyname('smtp.gmail.com'),
            'username' => 'xxx@gmail.com',
            'password' => 'xxssxxxx',
            'port' => '465',
            'encryption' => 'ssl'
        ]

我还将控制器中使用的支持邮件设置为上面显示的主本地配置中的同一个gmail地址。 我尝试在gmail帐户中切换到安全性较低的应用程序配置,但它不起作用,我并不特别喜欢更改它。当我使用ssl encryption

时,我收到以下错误
  

无法与主机建立连接... [#0]

如果我没有指定加密,我会收到超时错误。

我根据我的phpinfo文件启用了OpenSSL支持,但我无法使其正常工作。 TLS不起作用,因为如果我更改配置(端口:' 587'& encryption =' tls')我收到以下错误

  

stream_socket_enable_crypto():SSL操作失败,代码为1. OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

关于如何解决此问题的任何想法?这是一个不固定的问题吗?我应该使用其他邮寄分机吗?

6 个答案:

答案 0 :(得分:16)

选项可以这样设置:

Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
  

编辑注释 :禁用SSL验证会产生安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到Man-in-the-Middle Attack的攻击。 在将此作为解决方案使用之前,请确保完全了解安全问题。

答案 1 :(得分:2)

尝试使用gmail smtp IP

            'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => '64.233.171.108',
            'username' => 'XXXXXXX@gmail.com',
            'password' => 'XXXXXXX',
            'port' => '587',
            'encryption' => 'tls',
        ],

某些生产服务器无法通过DNS服务器解决FQDN

答案 2 :(得分:1)

对于gmail:加密必须设置为tls,移植到587并托管到smtp.gmail.com(检查您的 gethostbyname('smtp.gmail.com'), 获取正确的值)请参阅下面的示例:

 'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',
            'username' => 'yourUsername@gmail.com',
            'password' => 'yourPassword',
            'port' => '587',
            'encryption' => 'tls',
        ],

答案 3 :(得分:0)

请检查:

  1. 互联网连接
  2. 电子邮件配置
  3. 这是我的配置。电子邮件成功发送。

     'components'=>[
            'mailer' => [
               'class' => 'yii\swiftmailer\Mailer',
               'viewPath' => '@app/mail',
               'useFileTransport' => false,
               'transport' => [
                  'class'=>'Swift_SmtpTransport',
                  'host'=>'smtp.gmail.com', //sample
                  'username'=>'my@emaul.com', //sample email
                  'password'=>'~!@#$%%^&&', // sample password
                  'port'=>'465', // gmail ssl use port 465, 
                  'encryption'=>'ssl',
               ],
           ],
        ],
    

答案 4 :(得分:0)

我有这个问题我的疏忽是因为我连接tls作为我的加密,而远程服务器只支持较旧的ssl加密。

我所做的就是将加密参数值从“tls”更改为“ssl”,一切正常。

我希望这有助于某人。

答案 5 :(得分:-1)

添加streamOptions解决了我的问题!

'streamOptions' => [ 
        'ssl' => [ 
            'allow_self_signed' => true,
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ]