php_PHPチュートリアルでcurl smtpを介して電子メールを送信する
- WBOYオリジナル
- 2016-07-21 15:19:151041ブラウズ
最初にグーグルで検索したところ、関連する質問をしている人がたくさんいましたが、関連する答えは見つかりませんでした。phpclassesで関連するクラスが見つからなかったので、
SMTPプロトコル
の関連プロトコルを調べながらcurlを試し始めました。たとえば、Telnet を使用してメール サーバーに接続してみます。コードは次のとおりです。
$ Telnet email SMTP サービス アドレス 25 電子メール サービス IP を試行します。アドレス... 電子メール SMTP サービス アドレスに接続されました。 エスケープ文字は '^]' です。
電子メール サーバー アドレス Microsoft ESMTP MAIL サービスは Sat, 2 Jun 2012 15:02:12 +0800 で準備完了
EHLO 127.0.0.1
- Exchange Email Server AddressHello [メールボックス サービス IP アドレス]
-SIZE
-PIPELINING
-DSN
-ENHANCEDSTATUSCODES
-X-ANONYMOUSTLS
-AUTH NTLM LOGIN
-X-EXPS GSSAPI NTLM
-8BITMIME
-BINARYMIME
-チャンキング
- X EXCH50
XRDST
AUTH LOGIN
VXNlcm5hbWU6
ユーザー名 (base64_encode)
UGFzc3dvcmQ6
パスワード (base64_encode)
2.7.0 認証成功
MAIL FROM: 送信箱アドレス
2.1.0送信者 OK
RCPT TO: 受信箱アドレス
2.1.5受信者 OK
データ
メール入力を開始; で終了します。
送信する内容 (ここには多くの関連仕様があります)
2.6.0 <0b476f30-3b96-4e3d-84d2-395a96d34000 @exchange メール サーバー アドレス> ; 配信のためにメールをキューに入れました
QUIT
2.0.0 サービスが送信チャネルを閉じています
php テスト コード:
コードをコピーします
コードは次のとおりです:
header( "content-type:text/html;charset=utf-8");
$smtp = array( "url" => "メール SMTP サーバー アドレス", "ポート" = > "電子メール SMTP サーバー ポート" , // 通常は 25 "username" => "ユーザー名", "password" => "パスワード",
"from" => "送信アドレス",
"to" => " 受信アドレス",
"件名" => "タイトルをテスト",
"本文" => "内容をテスト"
$CRLF = "";カール =curl_init();
curl_setopt($curl, CURLOPT_URL, $smtp['url']);
curl_setopt($curl, CURLOPT_TIMEOUT,10); ;
関数 inlineCode($str){
$str = トリム($str);
return $str?'=?UTF-8?B?'.base64_encode($str).'?= ':''; }
function buildHeader($headers){
$ret = '';
foreach($headers as $k=>$v){
$ret.=$k.': '.$v."n";
}
return $ret;
}
//
$header = array(
'Return-path'=>'<'.$smtp['from'].'>',
'Date'= >date('r'),
'From'=> '<'.$smtp['from'].'>',
'MIME バージョン'=>'1.0',
'件名'=>inlineCode($smtp['subject']),
'To'=>$smtp['to'],
'Content-Type'=>'text/html; format=flowed',
'Content-Transfer-Encoding'=>'base64'
);
$data = buildHeader($header).$CRLF.chunk_split(base64_encode($smtp['body'])); $content = "EHLO ".$smtp["url"].$CRLF; // こんにちは
$content .= "AUTH LOGIN".$CRLF.base64_encode($smtp["username"]).$CRLF .base64_encode ($smtp["password"]).$CRLF; // ログインを確認します
$content .= "MAIL FROM:".$smtp["from"].$CRLF; // 送信アドレス
$content . TO:".$smtp["to"].$CRLF; // 受信アドレス
$content .= "DATA".$CRLF.$data.$CRLF.".".$CRLF; // コンテンツ送信
$ content .= "QUIT".$CRLF; // 終了
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) // Curl は戻りデータを受け取ります
$test =curl_exec($curl); );
var_dump($test);
echo "
rn"
var_dump($content);
curl_close($curl); 上記は php をテストするためのものです
製品コードを fsockopen とcurl と互換性のあるものにするためのパッケージのテストと変更には 6 時間近くかかりました
将来的には、単に電子メールを送信するための fsockopen とcurl と互換性のある smtp クラスを作成する時間が取れるでしょう。
http://www.bkjia.com/PHPjc/325390.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325390.html
技術記事
最初にグーグルで検索したところ、関連する質問をしている人がたくさんいましたが、関連する回答はありませんでした。phpclassesでも関連するクラスが見つからなかったので、stmpの関連プロトコルを調べながらcurl SMTPプロトコルを試し始めました。
声明:この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。