久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用 TLS 從 PHP 使用 Gmail 傳出 SMTP

Using Gmails Outgoing SMTP from PHP using TLS(使用 TLS 從 PHP 使用 Gmail 傳出 SMTP)
本文介紹了使用 TLS 從 PHP 使用 Gmail 傳出 SMTP的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我通過 Gmail SMTP 服務器從 PHP 發送電子郵件.我一直在使用帶有 SMTP 設置的 CakePHP 電子郵件組件.我最初在端口 465 上使用 SSL 一切正常,但發現我的網絡主機不允許通過 465 的傳出流量.但是他們確實告訴我允許通過端口 587 的傳出連接.

閱讀http://mail.google.com/support/后bin/answer.py?answer=13287 我以為只要更改端口號和協議就行了,但我無法讓它工作.

有問題的代碼行似乎是一個 fsockopen 調用:

fsockopen("ssl://smtp.gmail.com", 465, $errNum, $errStr, 30);//作品fsockopen("tls://smtp.gmail.com", 587, $errNum, $errStr, 30);//失敗

給出的錯誤是:

警告:fsockopen():SSL 操作失敗,代碼為 1.OpenSSL 錯誤消息:錯誤:1408F10B:SSL 例程:SSL3_GET_RECORD:第 1 行命令行代碼中的版本號錯誤警告:fsockopen():無法在第 1 行的命令行代碼中啟用加密警告:fsockopen():無法在第 1 行的命令行代碼中連接到 tls://smtp.gmail.com:587(未知錯誤)

這是在 PHP 5.3 中,phpinfo 顯示 OpenSSL 已啟用.任何幫助將不勝感激.

解決方案

不確定您是否還在尋找它,但是要啟動 tls,您必須通過服務器的命令來完成.這是一個簡單的設置,適用于 tls 和 gmail(如果您需要更多幫助而不僅僅是通過 tls 連接,請開始另一個問題):

";回聲獲取($smtp);//如果你想檢查應該返回 220$cmd = "EHLO ${_SERVER['HTTP_HOST']}";echo $cmd."
";把($smtp,$cmd);回聲獲取($smtp);//250$cmd = "STARTTLS";echo $cmd."
";把($smtp,$cmd);回聲獲取($smtp);//220if(false == stream_socket_enable_crypto($smtp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)){//fclose($smtp);//不確定是否需要關閉,因為此時我還沒有遇到安全故障die("無法啟動tls加密");}$cmd = "EHLO ".$_SERVER['HTTP_HOST'];回聲 $cmd;把($smtp,$cmd);回聲獲取($smtp);//250$cmd = "退出";echo $cmd."
";把($smtp,$cmd);回聲獲取($smtp);echo "</pre>";fclose($smtp);

I'm sending email from PHP through the Gmail SMTP server. I've been using the CakePHP email component with SMTP settings set. I originally had it all working fine using SSL over port 465 but have found my web host doesn't allow outgoing traffic over 465. They did however tell me that outgoing connections over port 587 is allowed.

After reading http://mail.google.com/support/bin/answer.py?answer=13287 I thought it would be as easy as changing the port number and protocol but I can't get it to work.

The offending line of code seems to be a fsockopen call:

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

The errors given are:

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

This is with PHP 5.3, phpinfo shows OpenSSL is enabled. Any help would be greatly appreciated.

解決方案

Not sure if you are still looking for it, but to start tls, you have to do it from the commands with the server. Here is a simple set up that works for tls with gmail (if you want more help beyond just connecting via tls, start another question):

<?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."
",$length);
}
if (!($smtp = fsockopen("smtp.gmail.com", 587, $errno, $errstr, 15))) {
    die("Unable to connect");
}
echo "<pre>
";
echo get($smtp); // should return a 220 if you want to check

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

$cmd = "STARTTLS";
echo $cmd."
";
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."
";
put($smtp,$cmd);
echo get($smtp);

echo "</pre>";

fclose($smtp);

這篇關于使用 TLS 從 PHP 使用 Gmail 傳出 SMTP的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Cannot use #39;Object as class name as it is reserved Cake 2.2.x(不能使用 Object 作為類名,因為它是保留的 Cake 2.2.x)
Session is lost after an OAuth redirect(OAuth 重定向后會話丟失)
Pagination Sort in Cakephp 3.x(Cakephp 3.x 中的分頁排序)
CakePHP Shared core for multiple apps(CakePHP 多個應用程序的共享核心)
Login [ Auth-gt;identify() ] always false on CakePHP 3(在 CakePHP 3 上登錄 [ Auth-identify() ] 始終為 false)
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes)(致命錯誤:允許的內存大小為 134217728 字節已用盡(嘗試分配 87 字節))
主站蜘蛛池模板: 国产精品网页 | 色综合激情 | 天天摸天天看 | 免费一级网站 | 久久成人综合 | 成人夜晚看av | 久久久国产精品视频 | 欧洲高清转码区一二区 | 男女羞羞的网站 | 久久久久久999 | 日本精品一区二区三区在线观看视频 | 奇米超碰在线 | 久久久久久国产精品久久 | 久久国产精品免费视频 | 国产精品久久777777 | 伊人在线| 西西裸体做爰视频 | av片网| 亚洲区一 | 日本精品一区二区三区在线观看视频 | 亚洲精品在线免费观看视频 | 日本国产欧美 | 天天干天天干 | 国产免费福利 | 岛国av免费在线观看 | 中文字幕在线观看国产 | 久久这里只有精品首页 | 九九亚洲 | 少妇久久久久 | 欧美久久精品一级c片 | 日韩欧美在线播放 | 伊色综合久久之综合久久 | 久久久新视频 | 国产精品区二区三区日本 | 国产一区二区三区视频在线观看 | 国产一区二区三区网站 | 亚洲协和影视 | 色永久 | 一区免费看 | 国产成人jvid在线播放 | 999视频在线播放 |