【发布时间】:2021-04-06 09:14:24
【问题描述】:
我正在尝试在输入配置后使用 Gmail SMTP 从我的本地主机 laravel 8 应用程序发送邮件,但不断收到
Swift_TransportException
Connection could not be established with host smtp.gmail.com :stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
我在我的 gmail 上打开了不太安全的应用程序设置,甚至下载了 cacert.pem 并将该位置添加到我的 php.ini 中,但它只是在提交表单后继续加载,然后给我上述错误。我需要做什么才能让它工作?
这是我的相关 .env 文件设置
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=mygmailaddress
MAIL_PASSWORD=******
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=mygmailaddress
MAIL_FROM_NAME="${APP_NAME}"
mail.php
'default' => env('MAIL_MAILER', 'smtp'),
'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,
'auth_mode' => null,
],
'ses' => [
'transport' => 'ses',
],
'mailgun' => [
'transport' => 'mailgun',
],
'postmark' => [
'transport' => 'postmark',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => '/usr/sbin/sendmail -bs',
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
],
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
];
php.ini
openssl.cafile=C:\wamp64\ssl\cacert.pem
openssl.capath=C:\wamp64\ssl
也许我应该更改我的 mail.php 文件中的某些内容?还是应该只存在 php.ini 中的一个字段? 我尝试将mail.php 中的smtp 邮件主机、端口和加密分别更改为smtp.gmail.com、465 和ssl,但这也不起作用。将 .env 端口更改为 587 和加密 TLS 也没有。我错过了什么?请帮忙。
虽然对 Laravel 还很陌生,但请多多关照,哈哈。
【问题讨论】:
-
该错误清楚地表明您的证书存储设置不正确,因此无法正确验证主机名。更改 CA 捆绑包位置后是否重新启动了 PHP 服务器?
-
你在 php.ini 中添加的位置在哪里?
-
@miken32 是的,我后来重新启动了它,但仍然遇到同样的错误。涉及的行如下所示:
openssl.cafile=C:\wamp64\ssl\cacert.pem -
您从哪里获得 CA 捆绑包?
phpinfo()通过您的 Web 服务器的输出是否确认配置设置的更改? -
@miken32 这是我在一月份早些时候从旧设备上下载回来的。我在哪里可以获得更新的 CA 捆绑包?是的,phpinfo() 显示了我输入的 cacert.pem 的位置。
标签: php laravel ssl smtp laravel-8