我正在尝试发送包含此配置的电子邮件:
return [
'driver' => 'smtp',
'host' => 'mail.mydomain.com',
'port' => 26,
'from' => ['address' => 'mailer@mydomain.com', 'name' => 'Mailer'],
'encryption' => 'tls',
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
];
当我提交表格时,我收到了这个erorr:
ErrorException in StreamBuffer.php line 95:
stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
我找到了这个解决方案,人们似乎已经解决了同一个库的问题,但我无法在Laravel中解决它。
答案 0 :(得分:19)
在config / mail.php
的底部添加'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
这将解决您的问题。
编辑注释 :禁用SSL验证会产生安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到Man-in-the-Middle Attack的攻击。 在将此作为解决方案使用之前,请确保完全了解安全问题。
答案 1 :(得分:6)
在您提供的链接中,解决方案很简单。
正确的解决方案是修复您的SSL配置 - 这不是PHP的错!
答案 2 :(得分:4)
如果您使用的是Laravel 7.0,则可以通过以下方式在SwiftMailer中禁用SSL验证(请注意,不建议禁用SSL验证!):
config/mail.php
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
],
],
答案 3 :(得分:3)
在我的情况下,问题与SSL有关。我的SMTP有一个自签名证书,我的laravel运行在PHP 5.6之上,它禁用'allow_self_signed'上下文变量为false并启用'verify_peer',因此在发送电子邮件时弹出错误。
由于我不想破解swiftmailer代码,我将服务器的证书颁发机构(CA)文件添加为我的系统执行laravel的可信CA.
我这样做了我的smtp服务器的CA证书,比如
-----BEGIN CERTIFICATE-----
MIIElTCCA32gAwIBAgIJAMZjjNg64RQwMA0GCSqGSIb3DQEBCwUAMIGNMQswCQYD
VQQGEwJVUzEMMAoGA1UECBMDTi9BMQwwCgYDVQQHEwNOL0ExJDAiBgNVBAoTG1pp
...
5a8a4QEwWmnAOgHetsOCvhfeGW3yAJPD8Q==
-----END CERTIFICATE-----
并将其写入我的laravel机器,该机器具有ubuntu 14.04到名为/usr/local/share/ca-certificates/my_cert.crt
的文件。使用.crt
结束文件并使其对所有人都可读是至关重要的。
然后调用update-ca-certificates
,证书将添加到服务器的有效CA列表中。