php 5.6邮件和SSL

时间:2015-07-07 17:48:45

标签: email openssl pear

自从我升级到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进行了一些更改,但我不知道我需要做哪些更改。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的麻烦并偶然发现了解决方案,这些明显与PHP 5.6中的变化有关(我并不是很高兴)。

  1. 现在,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);

  2. 此函数未使用php.ini中指定的套接字超时默认值。所以我更改了&#39; smtp.php&#39;到:

    $ timeout = 60; //以前为空;

  3. 希望能帮助别人。干杯穆雷

答案 1 :(得分:1)

我知道这个问题有点旧,但我会在这里留下答案,也许别人会发现它有用:https://stackoverflow.com/a/34090707/5639805