PHP使用swift邮件程序通过谷歌应用程序发送电子邮件

时间:2012-09-07 00:50:19

标签: php smtp google-apps swiftmailer

我知道有一些问题但我的问题并没有被我能找到的任何问题解决。

我在LAMP上使用swift邮件程序4.2.1。

我启用了openSSL: enter image description here

所以我尝试使用以下代码进行SSL连接:

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
          ->setUsername('email@somedomainwithgoogleapps.com')
          ->setPassword("pwd");
        $mailer = Swift_Mailer::newInstance($transporter);
        $message = Swift_Message::newInstance($subject)
          ->setFrom(array($from => 'From name'))
          ->setTo(array($to=> $name))
          ->setBody($html_content);

        $result = $mailer->send($message);

这会引发以下错误

  

未捕获的异常'Swift_TransportException',消息'失败   使用用户名在SMTP服务器上进行身份验   使用2可能的“email@somedomainwithgoogleapps.com”   认证人员   /Swift/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:171

如果我更改代码使用tls,如:

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls')...(rest is the same)

我得到了同样的错误。如果我尝试使用tls端口465,我会得到连接超时。

如果我跑:

$sock = fsockopen('tls://smtp.gmail.com', 465, $errno, $errstr, 10); 
echo 'Socket is: '; 
var_dump($sock); 

echo 'Errors: ' . $errno . ' ' . $errstr; 

我得到了

Socket is: resource(2) of type (stream) Errors: 0

其他信息:

var_dump(stream_get_transports());

返回:

  

array(8){[0] => string(3)“tcp”1 => string(3)“udp”[2] =>串(4)   “unix”[3] => string(3)“udg”[4] => string(3)“ssl”[5] =>串(5)   “sslv3”[6] => string(5)“sslv2”[7] => string(3)“tls”}

所以我有ssl和tls包装器......

2 个答案:

答案 0 :(得分:2)

我认为你可以使用它:

$transport = Swift_SmtpTransport::newInstance('smtp.googlemail.com', 465, "ssl") 
     ->setUsername('test@gmail.com') 
     ->setPassword('test'); 

- > smtp与googlemail而不是gmail ..

答案 1 :(得分:0)

您使用的密码应该是根据“应用程序专用密码”生成的密码,而不是您的原始密码。