自从我升级到php5.6后,我发现自己无法发送邮件。
$to = "Test1 <*******@gmail.com>";
$body = "Hi,\n\n this is just test email";
$headers = array(
'From' => '*******@gmail.com',
'To' => $to,
'Subject' => 'test email'
);
$smtp = Mail::factory('smtp', array(
'host' => 'smtp.sendgrid.com',
'port' => '587',
'auth' => 'login',
'username' => '*****',
'password' => '*****',
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo $mail->getMessage();
} else {
echo "<p> Message successfully sent!</p>";
}
登录身份验证失败[SMTP:STARTTLS失败(代码:220,响应:立即开始TLS协商)]
如果我将此Gmail代码与此代码一起使用,我也会收到错误
$smtp = Mail::factory('smtp',array (
'host' => 'ssl://smtp.googlemail.com',
'port' => '465',
'auth' => 'login',
'username' => '******@gmail.com',
'password' => '*******'
));
身份验证失败[SMTP:从服务器收到无效的响应代码(代码:534,响应:5.7.14请通过Web浏览器登录,然后再使用5.7.14再试一次.5.7.14了解详情,请点击5.7.14 {{ 3}} jz4sm22875767wjb.16 - gsmtp)]
我有一个运行ZF1的oid应用程序,我发现这个调用出现了问题Zend_Mail_Protocol_Smtp:
stream_socket_enable_crypto($this->_socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)
我已经读过在php 5.6中对OpenSSL进行了一些更改,但我不知道我需要做哪些更改。
答案 0 :(得分:2)
我遇到了同样的麻烦并偶然发现了解决方案,这些明显与PHP 5.6中的变化有关(我并不是很高兴)。
现在,verify_peer和verify_peer_name默认设置为true - 要求流式端口中涉及的两台计算机之间具有额外的安全级别。当我处理SMTP时,我不想要这个,STARTTLS加密对我来说已经足够了。所以关闭这些我添加了一些代码到Net / SMTP.php文件
$ options = array(&#39; ssl&#39; =&gt;数组(&#39; verify_peer_name&#39; =&gt; false,&#39; verify_peer&#39; =&gt; false)); < / p>
$ result = $ this-&gt; _socket-&gt; connect($ this-&gt; host,$ this-&gt; port,$ persistent,$ timeout,$ options);
此函数未使用php.ini中指定的套接字超时默认值。所以我更改了&#39; smtp.php&#39;到:
$ timeout = 60; //以前为空;
希望能帮助别人。干杯穆雷
答案 1 :(得分:1)
我知道这个问题有点旧,但我会在这里留下答案,也许别人会发现它有用:https://stackoverflow.com/a/34090707/5639805