【问题标题】:PHP Fatal error: Uncaught Swift_TransportException: Connection could not be established with host ssl://smtp.gmail.com :stream_socket_client()PHP致命错误:未捕获的Swift_TransportException:无法与主机ssl://smtp.gmail.com建立连接:stream_socket_client()
【发布时间】:2020-08-17 02:12:12
【问题描述】:

我正在使用带有 cmd 的 Windows 10。

当我使用 php index.php 启动我的 index.php 文件时,我收到了这个错误:

PHP Fatal error:  Uncaught Swift_TransportException: Connection could not be established with host ssl://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 in C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php:269 Stack trace:
#0 [internal function]: Swift_Transport_StreamBuffer->{closure}(2, 'stream_socket_c...', 'C:\\Users\\barte\\...', 272, Array)
#1 C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php(272): stream_socket_client('ssl://smtp.gmai...', 0, '', 30, 4, Resource id
#98)
#2 C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php(58): Swift_Transport_StreamBuffer->establishSocketConnection()
#3 C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php(143): Swift_Transport_Strea in C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php on line 269

Fatal error: Uncaught Swift_TransportException: Connection could not be established with host ssl://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 in C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php:269 Stack trace:
#0 [internal function]: Swift_Transport_StreamBuffer->{closure}(2, 'stream_socket_c...', 'C:\\Users\\barte\\...', 272, Array)
#1 C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php(272): stream_socket_client('ssl://smtp.gmai...', 0, '', 30, 4, Resource id
#98)
#2 C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php(58): Swift_Transport_StreamBuffer->establishSocketConnection()
#3 C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php(143): Swift_Transport_Strea in C:\Users\barte\Desktop\PHP\3\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php on line 269

我的 index.php 文件:

<?php

require "vendor/autoload.php";

$transport = new Swift_SmtpTransport("ssl://smtp.gmail.com", 465);
$transport->setUsername("mymail");
$transport->setPassword("******");

$mailer = new Swift_Mailer($transport);

$message = new Swift_Message();
$message
    ->setFrom("mymail@gmail.com")
    ->setTo("mymail@gmail.com")
    ->setSubject("Hello!")
    ->setBody("Hello, this is example body");

$mailer->send($message);

这是我的 composer.json 文件:

{
    "name": "bartek/3",
    "authors": [
        {
            "name": "Bartek",
            "email": "mymail@gmail.com"
        }
    ],
    "require": {
        "swiftmailer/swiftmailer": "^6.2"
    }
}


当我输入 composer --version 时,我得到:

PHP 临时目录 (C:\Users\barte\AppData\Local\Temp) 不存在 或者对 Composer 是不可写的。在 php.ini 中设置 sys_temp_dir Composer 版本 1.10.5 2020-04-10 11:44:22

谢谢

【问题讨论】:

    标签: php email ssl smtp swiftmailer


    【解决方案1】:

    我最近为此准备了代码 对于 TLS

    $transport = (new Swift_SmtpTransport('smtp.gmail.com', 587,'tls'))
    ->setUsername('username@gmail.com')
    ->setPassword('password');
    

    并且对于 SSL

    $transport = (new Swift_SmtpTransport('smtp.gmail.com', 25,'ssl'))
    ->setUsername('username@gmail.com')
    ->setPassword('password');
    

    【讨论】:

      【解决方案2】:

      我解决了。问题是,我输入了我的 Google 帐户的密码,但我应该将在“应用程序密码”中生成的密码粘贴到那里的 google 帐户设置中。你可以去Google Account Settings &gt; Security &gt; App passwords生成这样的密码

      注意:您必须先启用两步验证。否则App passwords 不会出现。

      【讨论】:

        【解决方案3】:

        ssl://smtp.gmail.com 不是邮件服务器的正确地址。如果您跳过协议而只使用smtp.gmail.com 会发生什么?

        【讨论】:

        • 我更改了它,现在,当我启动 index.php 时,我必须等待大约 30 秒,然后打印,类似“...超时...”
        猜你喜欢
        • 2020-11-03
        • 1970-01-01
        • 2012-12-20
        • 2017-12-08
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多