【问题标题】:Zend Mail Gmail SMTPZend 邮件 Gmail SMTP
【发布时间】:2010-11-08 19:28:27
【问题描述】:

您好,我正在尝试从 Zend_Mail 模块通过 gmail 发送一些电子邮件。 这是我的代码:

$config = array(
    'ssl' => 'tls',
    'port' => 587,
    'auth' => 'login',
    'username' => 'webmaster@mydomain.com',
    'password' => 'password'
);
$smtpConnection = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);

错误:

警告:stream_socket_enable_crypto() [streams.crypto]:此流不支持第 206 行 /library/Zend/Mail/Protocol/Smtp.php 中的 SSL/crypto 无法通过 TLS 连接

我尝试告诉我的托管服务提供商在 phi.ini 中启用 openssl.dll

但他们说没有必要,因为服务器在 Linux 中,并且不需要启用 openssl.dll 以使用 TLS 或 SSL。

是我的托管服务提供商错了还是我在代码中做错了什么。

提前致谢

法比安

【问题讨论】:

    标签: php zend-framework ssl email gmail


    【解决方案1】:

    openssl.dll 是 windows 的 openssl 扩展。

    在 Linux 上,您需要编译支持 OpenSSL 的 PHP。 http://www.php.net/manual/en/openssl.installation.php

    您需要用于 PHP 套接字和流函数的 OpenSSL 才能使用 TLS。 Zend 使用这些函数,因此需要相同的函数。

    【讨论】:

    • 如果启用了 Openssl,我如何在 phpinfo 中知道?我所看到的只是 apache2handler 中的这个 OpenSSL/0.9.8b
    • 您实际上需要两件事,OpenSSL 和 TLS 应该注册为流/套接字传输。这应该在下面找到:Registered Stream Socket Transports OpenSSL 应该在它自己的标题下找到,因为它是一个启用的扩展。 apache2handler 显示的是 apache 配置,而不是 PHP 的。因此,您确实在您的服务器上编译了 OpenSSL,并且配置了 apache 以使用它,但您可能没有使用 PHP 编译的 OpenSSL PHP 扩展。在你的 PHP.ini 中搜索 OpenSSL,看看你是否找到它。
    • 是的,我只有:已注册的流套接字传输 tcp、udp、unix、udg,并且没有 OpenSSL 的标头。所以我想问题都出在我的托管服务提供商方面。非常感谢您的帮助
    • 是的,您必须要求您的主机重新编译支持 OpenSSL 的 PHP。 OpenSSL 有点麻烦,因为 PHP 无法在运行时加载扩展,它需要用二进制文件编译。
    【解决方案2】:

    我在这里遇到了类似的问题,这是有效的; 使用 Zend 邮件传输和 yahoo smtp:

    $mailhost= 'smtp.example.com';
    $mailconfig = array(
        'auth'     => 'login',
        'username' => 'me@example.com',
        'password' => 'topsecret',
        'port'     => '465',
        'ssl'      => 'ssl'
    );
    $transport = new Zend_Mail_Smtp($mailhost, $mailconfig);
    Zend_Mail::setDefaultTransport($transport);
    

    这产生了一个错误:“权限被拒绝”并且没有发送邮件。在尝试了所有解决方案三周后,我发现有效的解决方案正在改变: $运输到; $transport = new Zend_Mail_Transport_Sendmail('-fsupport@website.com',$mailhost, $mailconfig);

    按预期工作......

    【讨论】:

    • 终于找到正确答案了!这不是设置本身,而是使用 Zend_Mail_Smtp 不适用于 gmail,而 Zend_Mail_Transport_Sendmail 可以。
    【解决方案3】:

    使用Zend_Mail::setDefaultTransport方法很舒服

    【讨论】:

      【解决方案4】:

      尝试将 ssl:// 设置为主机名的前缀并使用 465 作为端口。

      【讨论】:

      • 仍然出现同样的错误。我有 smtp.server = ssl://smtp.gmail.com 和端口 465
      【解决方案5】:

      经过数小时的故障排除,更改 'ssl' => 'tls' 到 'ssl' => 'ssl'

      为我工作。它在以前的服务器上运行良好。移到新服务器后,出现 tls 错误。

      【讨论】:

        猜你喜欢
        • 2012-01-24
        • 2011-10-16
        • 2017-11-04
        • 2014-06-23
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 2015-09-28
        • 2021-05-08
        相关资源
        最近更新 更多