ホームページ  >  記事  >  バックエンド開発  >  PHPでのメールの非同期送信に関する問題

PHPでのメールの非同期送信に関する問題

WBOY
WBOYオリジナル
2016-06-20 13:03:381814ブラウズ

要件:

あるシステムでは、製品のパッチファイルをアップロードしたり、製品の更新情報を公開したりした後、製品を使用するユーザー(多数のユーザー)にメールを送信する必要があります。 、送信 プロンプトが送信されたら!よく使用される PHP コードは次のように記述されます。

<p><?php</p>// ......<br />//查找出所有使用该产品的用户email地址,假设存放在$email数组中  <br />for($i=0;$i<count($email);$i++){<br />   sendemail();<br />}<br />function sendemail(){<br />    //发送邮件代码  <br />}<br /><p>//......</p>

今回は 100 通のメールが送信されると仮定します。この操作の結果はどうなりますか? ユーザー エクスペリエンス: ユーザーは待機します -> 電子メールの送信が完了します -> 情報を返します (この操作では、大量のメールの送信が必要になる可能性が高くなります)。電子メールの数、結果として PHP の実行時間が長すぎると、ユーザーは待つのにイライラするでしょう。

Apache または nginx が許容実行時間を超えて待機すると、タイムアウト エラーが返されます。

現時点では、操作が成功したかどうか、また送信されたメールの数はユーザーにはわかりません。このことから、上記のコードのユーザー エクスペリエンスは非常に悪く、タスクを正常に完了できないことがわかります。

それでは、ユーザー エクスペリエンスが低いというこの問題をどのように解決すればよいでしょうか?

ここで非同期実行という概念について説明します

ユーザー エクスペリエンス: ユーザーは待機します -> 完了した友達を送信しますなぜ手紙を送信するためのリンクが欠落しているのかと尋ねるでしょう。

OK、ユーザーがリクエストを送信すると、電子メール タスクは電子メールを個別に処理する PHP プログラムに転送されます。ユーザーに「送信完了」と表示された時点では、レターは送信されていません。現時点では、送信プログラムがバックグラウンドで懸命に動作し、文字を 1 つずつ送信しています。

<p><?php  </p>$domain="www.scutephp.com";<br />$url="/sendEmail.php";<br />$par="email=1@163.com,2@163.com,3@163.com&time=".time();<br />$header="POST $url HTTP/1.0\r\n";<br />$header.="Content-Type: application/x-www-form-urlencoded\r\n";<br />$header.="Content-Length: ".strlen($par)."\r\n\r\n";<br />$fp=@fsockopen ($domain,80,$errno,$errstr,30);<br />fputs($fp,$header.$par);<br />fclose($fp);<br />echo '发送完毕';


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。