smtp的swiftmailer完全坏了


swiftmailer completely broken for smtp?

刚刚将我的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的。

看起来像是从版本4.1.3开始的swiftmailer添加了starttls支持。在版本4.1.2和eariler中,使用端口465并指定"tls"作为加密方法效果良好。但是,4.1.3看起来不支持使用tls包装器,只允许使用starttls。换句话说,"tls"不再意味着"tls包装器",而开始意味着"starttls"。因此,将端口更改为587而不是465(SES文档中说应该用于starttls连接(解决了我的问题

这是一个非常糟糕的举动。