摘要:圖中其他兩個文件和是郵件發(fā)送類的核心文件,為了簡化調(diào)用,抽取了出來,詳細的用法和參數(shù)設置,可以參考的使用說明注意點在此步驟中,我們需要注意幾點是你設置的郵件發(fā)送的賬號是否已經(jīng)開啟并且找對對應的安全協(xié)議和端口號。
1、環(huán)境說明
阿里云centos7
thinkphp5.0.11
swoole2.0.8
在項目下建立如下的文件目錄:
其中SendMail.php是我們實際調(diào)用的發(fā)送郵件的文件。以下是主要代碼:
namespace applibraryutilsmail; use applibraryutilsmailPhpMailer; use applibraryutilsmailSmtp; use thinkLog; error_reporting(E_STRICT); date_default_timezone_set("Asia/Shanghai"); class SendMail { static function postmail($to,$subject = "",$body = ""){ $mail = new PhpMailer(); $mail->CharSet = config("mail.CharSet"); $mail->IsSMTP(); $mail->SMTPDebug = config("mail.SMTPDebug"); $mail->SMTPAuth = config("mail.SMTPAuth"); $mail->SMTPSecure = config("mail.SMTPSecure"); $mail->Host = config("mail.Host"); $mail->Port = config("mail.Port"); $mail->Username = config("mail.Username"); $mail->Password = config("mail.Password"); $mail->SetFrom(config("mail.From"), config("mail.Name")); $mail->Subject = $subject; $mail->MsgHTML($body); $address = $to; $mail->AddAddress($address, ""); if(!$mail->Send()) { Log::write("send to ".$to."error info:".$mail->ErrorInfo); return false; } else { return true; } } }
里面的config配置項,我們放在項目底下的config.php文件中,具體配置內(nèi)容如下:
//郵箱設置 "mail"=>[ "CharSet"=>"UTF-8", "SMTPDebug"=>0,// 啟用SMTP調(diào)試功能 0關(guān)閉 "SMTPAuth"=>true,// 啟用 SMTP 驗證功能 "SMTPSecure"=>"ssl",// 安全協(xié)議 "Host"=>"smtp.163.com",// SMTP 服務器 "Port"=>465,// SMTP服務器的端口號 "Username"=>"**********",// SMTP服務器用戶名 "Password"=>"**********",// SMTP服務器密碼 "From"=>"*********@163.com",// 發(fā)件人郵箱 "Name"=>"blue",// 發(fā)件人郵箱 ]2.1
這里我們只是實現(xiàn)了smtp協(xié)議發(fā)送的demo,所以在封裝的層面上沒有做到很全面,不是很靈活。圖中其他兩個文件(PhpMailer.php和Smtp.php)是Phpmailer郵件發(fā)送類的核心文件,為了簡化調(diào)用,抽取了出來,詳細的用法和參數(shù)設置,可以參考gayhub的使用說明phpmailer
2.2 注意點在此步驟中,我們需要注意幾點:1是你設置的郵件發(fā)送的賬號是否已經(jīng)開啟SMTP并且找對對應的安全協(xié)議和端口號。2、當前服務器是否支持SMTP服務,這邊很多時候會受一些socket函數(shù)的影響,遇到問題的時候,我們應該把SMTPDebug參數(shù)設置為1,然后根據(jù)debug信息去細心調(diào)試。3、發(fā)出的郵件有些會被放入垃圾箱,注意查收。
2.3 調(diào)用建立如下的文件目錄結(jié)構(gòu):
在Index.php中調(diào)用發(fā)送郵件的方法,具體代碼如下
public function sendMail(){ if(SendMail::postmail("[email protected]","test","123")){ echo "send success"; }else{ echo "send fail"; } }2.4 調(diào)用結(jié)果
我們可以在QQ郵箱的垃圾箱中找到我們剛剛發(fā)送的一封郵件
3、結(jié)合swoole實現(xiàn)異步群發(fā) 3.1安裝swooleswoole擴展安裝的詳細步驟官網(wǎng)上面都有,不再贅述,swoole文檔傳送門
安裝完swoole之后,建議為自己的IDE加上swoole的代碼提示,配置IDE提示swoole代碼的傳送門
我們先實現(xiàn)異步的服務端:
/** * description:服務端 */ public function syncSend(){ $serv = new swoole_server("0.0.0.0",8082); $serv->set(array("task_worker_num" => 4)); $serv->on("receive", function($serv, $fd, $from_id, $data) { $task_id = $serv->task($data); echo "開始投遞異步任務 id=$task_id "; }); $serv->on("task", function ($serv, $task_id, $from_id, $data) { echo "接收異步任務[id=$task_id]".PHP_EOL; for ($i = 0 ; $i<20;$i++){ if(SendMail::postmail("[email protected]","test",$data)){ echo "send".$i." success"." "; }else{ echo "send".$i." fail"." "; } } $serv->finish(""); }); $serv->on("finish", function ($serv, $task_id, $data) { echo "異步任務[id=$task_id]完成".PHP_EOL; }); $serv->start(); }
在服務端,我們用了一個20的loop來模擬了群發(fā),實際換成不同的email地址就可。
下面我們實現(xiàn)客戶端
/** * description:客戶端 */ public function index() { $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); $ret = $client->connect("127.0.0.1", 8082); if(empty($ret)){ echo "error!connect to swoole_server failed"; } else { $client->send("blue");//這里只是簡單的實現(xiàn)了發(fā)送的內(nèi)容 } }3.3開啟服務端
這里必須要用CLI方式,我們進入項目的根目錄。
執(zhí)行
netstat -apn | grep 8082
先監(jiān)測一下8082端口是否被占用,如果占用則
kill -9 PID(進程號)
殺死進程
然后我們執(zhí)行
php public/index.php index/index/syncSend
這條命令的作用是用cli模式來使我們的8082端口處于監(jiān)聽狀態(tài)。且保持這個終端處于活躍狀態(tài),這樣方便我們查看發(fā)送的結(jié)果。
接著我們可以用CLI或者瀏覽器訪問的方式來訪問我們的客戶端
php public/index.php index/index/index
當我們執(zhí)行一次的時候客戶端的時候,我們可以在服務端的終端看到屏幕上面出現(xiàn)如下的畫面:
說明我們已經(jīng)正常群發(fā)了。
下面,我們就來測試異步,因為163服務器會對IP進行檢測,如果在某個時間發(fā)送也別頻繁的話,會出現(xiàn)發(fā)送失敗的情況,所以我們測試的時候,采用連續(xù)執(zhí)行4次客戶端的方式
下面是執(zhí)行的結(jié)果:
從圖中發(fā)送的順序來看,我們可以很容易的判斷,我們已經(jīng)實現(xiàn)了異步的發(fā)送。
郵箱里面也接收到了剛剛發(fā)送的郵件。
swoole是一種想要熟悉和熟練使用的擴展,但是限于網(wǎng)絡編程知識的不足,所以還是要多多測試和學習,demo中有不足的地方,還請指出QAQ
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30630.html
摘要:此接口主要用于客服等有人工消息處理環(huán)節(jié)的功能,方便開發(fā)者為用戶提供更加優(yōu)質(zhì)的服務。不支持廣告等營銷類消息以及其它所有可能對用戶造成騷擾的消息。 1、關(guān)于群發(fā)接口和消息接口 關(guān)于群發(fā)接口1.訂閱號每天可以群發(fā)消息一條,服務號每月(自然月)四條的群發(fā)權(quán)限。開發(fā)者模式下,可以通過高級群發(fā)接口,實現(xiàn)更靈活的群發(fā)能力。2.注意● 對于認證訂閱號,群發(fā)接口每天可成功調(diào)用1次,此次群發(fā)可選擇發(fā)送給全...
摘要:郵件推送是摩杜云自主研發(fā)的一款簡單高效的電子郵件發(fā)送服務,能幫助你快速精準地實現(xiàn)事務郵件通知郵件和批量郵件的發(fā)送。電子郵件群發(fā)已經(jīng)成為非常普遍的營銷方式,一般來說,用這種方式來給潛在的客戶發(fā)送信息,可以取得比較好的效果。而且電子郵件的用戶數(shù)量龐大,幾乎懂得互聯(lián)網(wǎng)、懂得上網(wǎng)或者正在工作的人都會使用到電子郵件,而且全球使用電子郵件的人數(shù)早已經(jīng)超過了30億人。 這比單純的一些短視頻平臺的流量...
摘要:現(xiàn)如今,網(wǎng)上有很多郵件營銷服務商,而摩杜云卻是其中一家口碑不錯的服務商,不僅便宜好用,而且還提供小時在線技術(shù)服務。群發(fā)數(shù)量不大,幾千或幾萬封,也可以使用摩杜云郵件推送,專人監(jiān)測,效果更好。近來年,隨著信息化的快速發(fā)展,電子郵件營銷也火爆起來。要知道,電子郵件營銷是一種覆蓋面廣,且成本低、高回報的推廣方式,對此成為了很多企業(yè)不可或缺的營銷工具。那么,電子郵件營銷哪家好呢?下面就讓小杜跟大家介紹...
摘要:本米撲博客先介紹幾個最簡單的發(fā)送郵件方式記錄下,像郵件,附件等也是支持的,需要時查文檔即可。特別注意命令發(fā)送郵件,默認用端口號,由于阿里云騰訊云等封禁了端口號,因此本示例需在開通端口機器上測試執(zhí)行命令收件結(jié)果 Python發(fā)送email的三種方式,分別為使用登錄郵件服務器、使用smtp服務、調(diào)用sendmail命令來發(fā)送三種方法 本文原文自米撲博客:Python 發(fā)送 email 的三...
閱讀 2855·2021-11-25 09:43
閱讀 1019·2021-10-11 10:57
閱讀 2513·2020-12-03 17:20
閱讀 3762·2019-08-30 14:05
閱讀 2447·2019-08-29 14:00
閱讀 2015·2019-08-29 12:37
閱讀 1696·2019-08-26 11:34
閱讀 3239·2019-08-26 10:27