使用Gmail SMTP的Swiftmailer无法发送消息。出了什么问题?

时间:2018-03-29 07:50:35

标签: php email smtp gmail swiftmailer

我在PHP7 Codeanywhere容器中配置了Swiftmailer。我不使用任何框架,所以我的基础设施只是: 具有库存配置的Linux机器,PHP7,Composer和Swiftmailer。

我没有运行自己的SMTP服务器,因此决定使用Google的SMTP。运输是Swiftmailer的运输。

来自Swiftmailer's docs的标准化配置。 所以我的代码是:


    require_once '/box/workspace/vendor/autoload.php';
    // Create the Transport
    $transport = (new Swift_SmtpTransport('ssl://smtp.gmail.com', 465))
      ->setUsername('mymail@gmail.com')
      ->setPassword('mypassword')
    ;

    // Create the Mailer using your created Transport
    $mailer = new Swift_Mailer($transport);

    // Create a message
    $message = (new Swift_Message('Wonderful Subject'))
      ->setFrom(['mymailgmail.com' => 'John Doe'])
      ->setTo(['hismail@gmail.com', 'hermail@yahoo.com' => 'My reciever name'])
      ->setBody('Here is the message itself')
      ;

    // Send the message
    $result = $mailer->send($message);

但是无法发送电子邮件。跟踪是:


    box@box-codeanywhere workspace]$ php a/mail.php

       > PHP Fatal error:  Uncaught Swift_TransportException: Expected response
       > code 250 but got code "535", with message "535-5.7.8 Username and
       > Password not accepted. Learn more at 535 5.7.8 
       > https://support.google.com/mail/?p=BadCredentials
       > j23-v6sm3304186oiy.22 - gsmtp " in
       > 
      /box/workspace/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:419
    > Stack trace:
    > #0 /box/workspace/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(317):
    > Swift_Transport_AbstractSmtpTransport->assertResponseCode('535-5.7.8
    > Usern...', Array)
    > #1 /box/workspace/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(272):
    > Swift_Transport_AbstractSmtpTransport->executeCommand('RSET\r\n',
    > Array, Array)
    > #2 /box/workspace/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php(55):
    > Swift_Transport_EsmtpTransport->executeCommand('RSET\r\n', Array)
    > #3 /box/workspace/vendor/swiftmailer/swiftmailer/lib/cla in /box/workspace/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php
    > on line 419 [box@box-codeanywhere workspace]$

我认为此日志说明登录名或密码不正确,或者由于某些其他原因,Gmail不会接受他们。

但是登录/密码是正确的。

谷歌的链接中的链接说明了两件事,在很多论坛上讨论过:

  1. 允许不太安全的应用:如果您不使用两步验证,则可能需要允许安全性较低的应用访问您的帐户。

  2. 如果上述提示无效,请访问https://www.google.com/accounts/DisplayUnlockCaptcha并按照页面上的步骤操作。

  3. 我做了两件事,但它并没有帮助我。

    我花了好几个小时搜索论坛和Stackoverflow。许多答案和教程(例如this)已经过时并且是旧版本的Swiftmailer,因此它们在2018年无效,因为程序的开发人员制作了大量changes。 许多答案建议从Google执行我的1-2步骤。其他人建议改变我的

    
        'ssl://smtp.gmail.com', 465) to 567 
    
    

    (例如此question) 不幸的是,这对我没有帮助。

    请帮我解决这个问题!也许Symphony Framework是必需的?如果是这样,请原谅我的愚蠢。或者可能需要对Swiftmailer的配置进行一些更改?

    更新 添加了防火墙规则,接受TCP 465上的连接:

    iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

    检查我的机器的465 TCP端口是否已打开:

      

    [box @ box-codeanywhere workspace] $ netstat -punta(没有信息可以   读取" -p":geteuid()= 500但你应该是root。)活跃的互联网   连接(服务器和已建立)Proto Recv-Q Send-Q Local   地址外国地址
      PID /程序名称tcp 0 0 0.0.0.0:22
      0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:25 0.0.0.0:*
      LISTEN - tcp 0 0 0.0.0.0:3306
      0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN - tcp 0 0 my_ip:51121 my_2_ip:465
      TIME_WAIT - tcp 0 0 my_s_ip:22
      my_con_ip:43664 ESTABLISHED - tcp 0 0 ::: 22
      ::: * LISTEN -

    更新2: 尝试了另一个SMTP服务器 - 一切正常。 因此,我认为问题与Gmail有关..

0 个答案:

没有答案