刚刚将我的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特有的。
答案 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非常糟糕的举动。