程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 異步發送郵件的問題

php 異步發送郵件的問題

編輯:關於PHP編程

php 異步發送郵件的問題


需求:

在某系統裡,上傳完一個產品的補丁文件或發布產品的更新信息,需要給使用該產品的用戶(用戶數量較多)發送一封電子郵件,發送後提示發送完畢!

我們常用的PHP代碼寫法如下:

<?php
// ......
//查找出所有使用該產品的用戶email地址,假設存放在$email數組中  
for($i=0;$i<count($email);$i++){
   sendemail();
}
function sendemail(){
    //發送郵件代碼  
}
//......

假設該次發送100封郵件。本次操作會出現什麼結果呢?

用戶體驗:用戶等待->發送郵件完畢->返回信息(這期間極有可能,腳本執行超時)

本次操作由於需要發送大量的郵件,導致php執行時間過長,用戶煩躁的等待。當apache或者nginx等待超過允許執行時間,將返回超時錯誤。這個時候用戶不明確本次操作到底成功與否,到底發出了幾封郵件。

由此我們可以看出以上代碼用戶體驗極差,並且不能夠順利完成任務。

那麼如何解決這個用戶體驗較差的問題呢?

這裡提到一個概念,異步執行

用戶體驗:用戶等待->發送完畢

朋友們就會問,怎麼缺少發信環節?

OK,發信環節就在用戶提交請求的時候,把發信任務轉給了一個單獨處理發信的php程序處理了,當用戶看見“發送完畢”的時候其實信還沒發送完,這個時候,發信程序正在後台努力的工作著,一封一封的向外發送。

<?php  
$domain="www.phpernote.com";
$url="/sendEmail.php";
$par="[email protected],[email protected],[email protected]&time=".time();
$header="POST $url HTTP/1.0\r\n";
$header.="Content-Type: application/x-www-form-urlencoded\r\n";
$header.="Content-Length: ".strlen($par)."\r\n\r\n";
$fp=@fsockopen ($domain,80,$errno,$errstr,30);
fputs($fp,$header.$par);
fclose($fp);
echo '發送完畢';

您可能感興趣的文章

  • 如何解決php中並發讀寫文件沖突的問題
  • php發送郵件組件
  • 使用PHP的GZip壓縮功能對網站JS和CSS文件進行壓縮加速網站訪問速度
  • 大流量網站該如何實現優化服務器、靜態化、數據庫優化、負載均衡以實現高負載
  • Javascript解決左右高度自適應的問題
  • PHP解決網址URL編碼問題的函數urlencode()、urldecode()、rawurlencode()、rawurldecode()
  • 用PHP函數memory_get_usage獲取當前PHP內存消耗量以實現程序的性能優化
  • 發送郵件SMTP Error Could not connect to SMTP host. send fail的解決辦法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved