Zend Mail Gmail SMTP

6

你好,我正在尝试使用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]:此流不支持SSL/crypto,位于/library/Zend/Mail/Protocol/Smtp.php的第206行 无法通过TLS连接

我曾试图告诉我的主机提供商在phi.ini中启用openssl.dll

但是他们说这并不必要,因为服务器在Linux上运行,不需要启用openssl.dll 来使用TLS或SSL。

我的主机提供商是错的还是我的代码有问题?

先感谢您的帮助

Fabian

5个回答

12

openssl.dll是Windows平台下的OpenSSL扩展。

在Linux系统中,您需要编译带有OpenSSL支持的PHP。 http://www.php.net/manual/zh/openssl.installation.php

使用TLS协议对PHP sockets和stream函数进行加密通信时需要使用OpenSSL。Zend框架也使用这些函数,因此需要相同的支持。


我怎样在phpinfo中知道是否启用了Openssl?我只看到在apache2handler中的OpenSSL/0.9.8b。 - Fabian
2
你实际上需要两个东西,OpenSSL和TLS应该被注册为流/套接字传输。这应该在以下位置找到:已注册的流套接字传输由于它是一个启用的扩展,因此应在其自己的标题下找到OpenSSL。apache2handler显示了apache配置,而不是PHP的配置。因此,您的服务器上已编译OpenSSL并配置了apache以使用它,但您可能没有将OpenSSL PHP扩展与PHP一起编译。搜索您的PHP.ini文件以查找OpenSSL并查看是否找到它。 - bucabay
是的,我只有: 已注册的流套接字传输 tcp、udp、unix、udg 和没有 OpenSSL 的头文件。所以我想问题都在我的托管提供商那边。非常感谢您的帮助。 - Fabian
是的,你需要向你的主机提出请求,让他们重新编译支持OpenSSL的PHP。 OpenSSL有点麻烦,因为PHP无法在运行时加载扩展,它需要与二进制文件一起编译。 - bucabay

6

我曾经遇到过类似的问题,以下是解决方法;使用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 为; $transport = new Zend_Mail_Transport_Sendmail('-fsupport@website.com',$mailhost, $mailconfig); 如预期般工作...

1
终于找到正确的答案了!问题不在于设置本身,而是使用Zend_Mail_Smtp无法与Gmail一起工作,而Zend_Mail_Transport_Sendmail可以。 - Elie

2

0

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


仍然出现相同的错误。我已经将smtp.server设置为ssl://smtp.gmail.com,并且端口设置为465。 - Fabian

0

经过数小时的故障排除,将代码中的'ssl' => 'tls'更改为'ssl' => 'ssl'

对我而言解决了问题。在之前的服务器上一切正常,在迁移到新服务器后开始出现TLS错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接