php 非同步發送郵件的問題

來源:互聯網
上載者:User
需求:

在某系統裡,上傳完一個產品的補丁檔案或發布產品的更新資訊,需要給使用該產品的使用者(使用者數量較多)發送一封電子郵件,發送後提示發送完畢!我們常用的PHP代碼寫法如下:

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

//......

假設該次發送100封郵件。本次操作會出現什麼結果呢?使用者體驗:使用者等待->發送郵件完畢->返回資訊(這期間極有可能,指令碼執行逾時)本次操作由於需要發送大量的郵件,導致php執行時間過長,使用者煩躁的等待。

當apache或者nginx等待超過允許執行時間,將返回逾時錯誤。

這個時候使用者不明確本次操作到底成功與否,到底發出了幾封郵件。由此我們可以看出以上代碼使用者體驗極差,並且不能夠順利完成任務。

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

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

使用者體驗:使用者等待->發送完畢朋友們就會問,怎麼缺少發信環節?

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

$domain="www.scutephp.com";
$url="/sendEmail.php";
$par="email=1@163.com,2@163.com,3@163.com&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 '發送完畢';

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.