swiftmailer完全打破了smtp?

时间:2013-02-26 16:02:52

标签: php

刚刚将我的swiftmailer checkout更新到最新版本4.3.0。以下非常简单的代码不再有效,连接超时:

<? 
require_once 'Swift-4.3.0/lib/swift_required.php';

$transport = Swift_SmtpTransport::newInstance('email-smtp.us-east-1.amazonaws.com',465, 'tls')
  ->setUsername('USERNAME')
  ->setPassword('PASSWORD')
  ;
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance('Yo')
  ->setFrom(array('jnankin@gmail.com' => 'Josh'))
  ->setTo(array('jnankin@gmail.com'))
  ->setBody('Here is the message itself')
  ;

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

然后我得到以下内容:

PHP Fatal error:  Uncaught exception 'Swift_IoException' with message 'Connection to tcp://email-smtp.us-east-1.amazonaws.com:465 Timed Out' in /home/jnankin/Desktop/Swift-4.3.0/lib/classes/Swift/Transport/StreamBuffer.php:169
Stack trace:
#0 /home/jnankin/Desktop/Swift-4.3.0/lib/classes/Swift/Transport/AbstractSmtpTransport.php(400): Swift_Transport_StreamBuffer->readLine(0)
#1 /home/jnankin/Desktop/Swift-4.3.0/lib/classes/Swift/Transport/AbstractSmtpTransport.php(291): Swift_Transport_AbstractSmtpTransport->_getFullResponse(0)
#2 /home/jnankin/Desktop/Swift-4.3.0/lib/classes/Swift/Transport/AbstractSmtpTransport.php(119): Swift_Transport_AbstractSmtpTransport->_readGreeting()
#3 /home/jnankin/Desktop/Swift-4.3.0/lib/classes/Swift/Mailer.php(80): Swift_Transport_AbstractSmtpTransport->start()
#4 /home/jnankin/Desktop/email.php(17): Swift_Mailer->send(Object(Swift_Message))
#5 {main}
  thrown in /home/jnankin/Desktop/Swift-4.3.0/lib/classes/Swift/Transport/StreamBuffer.php on line 169

更新:这个完全相同的代码(无任何更改)适用于版本4.1.2。版本4.1.3不再有效。我尝试过不同的SMTP服务器:mailgun,sendgrid等......这似乎是swiftmailer特有的。

1 个答案:

答案 0 :(得分:13)

看起来从版本4.1.3开始swiftmailer添加了starttls支持。在版本4.1.2和eariler中,使用端口465并指定'tls'作为加密方法工作正常。然而4.1.3看起来它不支持使用tls包装器并且只允许starttls。换句话说,“tls”停止意味着“tls wrapper”并开始意味着“starttls”。因此,将端口更改为587而不是465(正如SES文档所说的应该用于starttls连接)解决了我的问题。

swiftmailer imho非常糟糕的举动。