使用TLS使用来自PHP的Gmails传出SMTP

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用TLS使用来自PHP的Gmails传出SMTP脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在通过Gmail SMTP服务器PHP发送邮件.我一直在使用带有SMTP设置的CakePHP电子邮件组件.我最初使用SSL通过端口465工作正常,但发现我的网站主机不允许超过465的传出流量.但他们确实告诉我允许通过端口587的传出连接.

阅读http://mail.google.com/support/bin/answer.py?answer=13287之后,我认为这就像更改端口号和协议一样简单,但我无法让它工作.

令人讨厌的代码行似乎是一个fsockopen调用

fsockoPEn("ssl://smtp.gmail.com",465,$errNum,$errStr,30); // WORKS
fsockopen("tls://smtp.gmail.COM",587,30); // FAILS

给出的错误是:

Warning: fsockopen(): SSL operation Failed wITh code 1. OpenSSL Error messages:
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number in Command line code on line 1

Warning: fsockopen(): Failed to enable crypto in Command line code on line 1

Warning: fsockopen(): unable to connect to tls://smtp.gmail.com:587 (UnkNown error) in Command line code on line 1

这是PHP 5.3,PHPinfo显示OpenSSL已启用.任何帮助将不胜感激.

不确定你是否还在寻找它,但是要开始tls,你必须从服务器的命令中做到一点.这是一个简单的设置,适用于使用gmail(如果你想要更多的帮助,只需通过tls连接,启动另一个问题):
<?PHP
function get($socket,$length=1024){
    $send = '';
    $sr = fgets($socket,$length);
    while( $sr ){
        $send .= $sr;
        if( $sr[3] != '-' ){ break; }
        $sr = fgets($socket,$length);
    }
    return $send;
}
function put($socket,$cmd,$length=1024){
    fputs($socket,$cmd."\r\n",$length);
}
if (!($smtp = fsockopen("smtp.gmail.com",$errno,$errstr,15))) {
    die("Unable to connect");
}
echo "<PRe>\n";
echo get($smtp); // should return a 220 if you want to check

$cmd = "EHLO ${_SERVER['HTTP_HOST']}";
echo $cmd."\r\n";
put($smtp,$cmd);
echo get($smtp); // 250

$cmd = "STARTTLS";
echo $cmd."\r\n";
put($smtp,$cmd);
echo get($smtp); // 220
if(false == stream_socket_enable_crypto($smtp,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)){
    // fclose($smtp); // unsure if you need to close as I haven't run into a security fail at this point
    die("unable to start tls encryption");
}

$cmd = "EHLO ".$_SERVER['HTTP_HOST'];
echo $cmd;
put($smtp,$cmd);
echo get($smtp); // 250

$cmd = "QUIT";
echo $cmd."\r\n";
put($smtp,$cmd);
echo get($smtp);

echo "</pre>";

fclose($smtp);

脚本宝典总结

以上是脚本宝典为你收集整理的使用TLS使用来自PHP的Gmails传出SMTP全部内容,希望文章能够帮你解决使用TLS使用来自PHP的Gmails传出SMTP所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。