我正在通过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的更多相关文章

  1. html5 http的轮询和Websocket原理

    这篇文章主要介绍了html5 http的轮询和Websocket原理的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 如何检查CNContact swift中的联系人来源?

    在联系人应用程序中,有像“iCloud”,“yahoo”,“gmail”这样的组.在swift中,是否可以仅从gmail源获取联系人?

  3. iOS中的深层链接在Gmail中被删除

    我正在尝试发送一个电子邮件,深入链接到我的iOS应用程序,使用myapp://格式从电子邮件中打开它.在任何iOS邮件客户端中,但不在Gmail应用程序中都可以使用它将其删除,仅留下文本.除了创建一个从浏览器重定向到应用程序的网络链接之外,有没有人有解决方案/替代方案?

  4. Xcode 4 / iOS – 使用SMTP从我的应用程序发送电子邮件

    我一直在寻找一个框架,只需让我从我的应用程序内发送一封电子邮件.我已经尝试过MailCore,Pantomime和SKPSMTP,没有运气.我不能让他们在Xcode中编译,所以我推测他们已经过时了.有什么办法可以做到吗?谢谢.解决方法您可以轻松地从iOS设备发送电子邮件.不需要实现SMTP和所有.在iOS中使用内置电子邮件功能的最佳方法是让您访问通讯录!为了完整起见,如果用户按取消或发送,我必须写这个选择器来关闭电子邮件窗口–快乐编码…

  5. ios – Swift:使用GCDAsyncUdpSocket接收UDP

    开始:接收:发送:编辑:添加了忘记的代码行.解决方法我终于得到它使用这个套接字设置:

  6. 尝试使用swift mailer,gmail smtp,php发送邮件

    这里是我的代码:在运行时出现此错误…

  7. Swift Socket 实例 两份资料不错

    Swift-使用vaporsocks库进行socket通信(基于TCP、UDP协议)http://www.hangge.com/blog/cache/detail_1588.htmlSwift-使用socket进行通信(附聊天室样例)http://www.hangge.com/blog/cache/detail_756.htmlIBM-Swift/BlueSockethttps://github.

  8. android – 如何在Intent ACTION_SEND中将超链接传递给Gmail?

    可能是这个问题已经被问到或者是另一个问题的重复,但是我的搜索没有得到任何解决方案.以下是我对我的问题所遵循的链接:Link1Link2实际上,我的问题与使用ACTION_SEND在Android默认意图中共享HTML文本有关.当我尝试创建具有不同值的URL的超链接时,它显示一个简单的值文本.这不是可点击的链接.我是这样做的:对于body2:当我使用Gmail共享文本时,电子邮件中的超链接文本将作为

  9. 如何在android中设置多个SMTP服务器?

    我的问题是如何设置多个SMTP服务器在Android中发送邮件,如:雅虎,hotmail,gmail,rediff任何类型的域名将在发送邮件时起作用.任何人都可以建议任何网站或任何想法吗?请帮帮我,谢谢你.解决方法以下是GMail,Yahoo!的测试设置.和Hotmail.使用适用于Android的JavaxMail端口进行测试.

  10. Android从服务器套接字侦听消息

    解决方法您可以在服务中创建一个线程来监听服务器.第二个线程用于发送命令.然后,对于您的服务,您应该创建一个带有处理程序的主线程.此处理程序将处理来自这两个线程的消息.

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部