我正在尝试使用我在此处找到的CakePHP SwiftMailer组件发送电子邮件: http://bakery.cakephp.org/articles/sky_l3ppard/2009/11/07/updated-swiftmailer-4-xx-component-with-attachments-and-plugins
我发送的服务器使用SMTP和TLS通过端口25.这是我尝试发送邮件时出现的错误:
Notice (8): Trying to get property of non-object [APP/views/helpers/hdl_session.php, line 14]
Warning (2): stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages:
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number [CORE/vendors/classes/Swift/Transport/StreamBuffer.php, line 271]
Warning (2): stream_socket_client() [function.stream-socket-client]: Failed to enable crypto [CORE/vendors/classes/Swift/Transport/StreamBuffer.php, line 271]
Warning (2): stream_socket_client() [function.stream-socket-client]: unable to connect to tls://mail.aedisit.com:25 (Unknown error) [CORE/vendors/classes/Swift/Transport/StreamBuffer.php, line 271]
Warning (2): Illegal offset type in isset or empty [CORE/cake/libs/i18n.php, line 177]
Warning (2): Cannot modify header information - headers already sent by (output started at /srv/www/stage/hypercool/cake/libs/debugger.php:673) [CORE/cake/libs/controller/controller.php, line 742]
这是我的phpinfo中的OpenSSL信息:
openssl
OpenSSL support enabled
OpenSSL Library Version OpenSSL 0.9.8o 01 Jun 2010
OpenSSL Header Version OpenSSL 0.9.8o 01 Jun 2010
来自我的phpinfo的更多信息:
PHP Version 5.3.5-1ubuntu7.2
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
非常感谢任何帮助: - )
修改
SSL操作失败,代码为1. OpenSSL错误消息: 错误:1408F10B:SSL例程:SSL3_GET_RECORD:版本号错误
这似乎是问题的根源。任何人都知道这到底意味着什么?
答案 0 :(得分:2)
我们已经解决了这个问题。问题似乎与我们的SSL版本和SwiftMailer的连接方法有关。 SwiftMailer组件尝试使用TLS进行连接,而不是首先需要以纯文本连接,然后启动TLS连接。希望这可以帮助其他人解决这个问题。
答案 1 :(得分:2)
更新您的SwiftMailer库。我最近遇到了SwiftMailer 4.0.6的这个问题并升级到了4.1.6 - 现在它就像一个魅力:)
答案 2 :(得分:0)
我已经解决了这个问题。 您可以使用以下配置:
'default' => [
'className' => 'Smtp',
'host' => 'ssl://smtp.gmail.com',
'username' => 'GMAIL_EMAIL_ADDRESS',
'password' => 'GMAIL_PASSWORD',
'port' => 465, //here was the problem
'timeout' => 50,
'client' => null,
'tls' => null,
'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
],
如果您使用的是EC2(AWS实例),那么您必须允许465端口(为SMTP创建自定义TCP规则 - 端口25或SMTPS - 端口465)