成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

thinkphp5+swoole實現(xiàn)異步郵件群發(fā)(SMTP方式)

tuniutech / 948人閱讀

摘要:圖中其他兩個文件和是郵件發(fā)送類的核心文件,為了簡化調(diào)用,抽取了出來,詳細的用法和參數(shù)設置,可以參考的使用說明注意點在此步驟中,我們需要注意幾點是你設置的郵件發(fā)送的賬號是否已經(jīng)開啟并且找對對應的安全協(xié)議和端口號。

1、環(huán)境說明

阿里云centos7
thinkphp5.0.11
swoole2.0.8

2、tp實現(xiàn)郵件發(fā)送

在項目下建立如下的文件目錄:

其中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安裝swoole

swoole擴展安裝的詳細步驟官網(wǎng)上面都有,不再贅述,swoole文檔傳送門
安裝完swoole之后,建議為自己的IDE加上swoole的代碼提示,配置IDE提示swoole代碼的傳送門

3.2實現(xiàn)異步群發(fā)

我們先實現(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ā)送的郵件。

4、后記~

swoole是一種想要熟悉和熟練使用的擴展,但是限于網(wǎng)絡編程知識的不足,所以還是要多多測試和學習,demo中有不足的地方,還請指出QAQ

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30630.html

相關(guān)文章

  • 利用客服消息和模板消息實現(xiàn)微信群發(fā)(突破群發(fā)接口的上限)

    摘要:此接口主要用于客服等有人工消息處理環(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ā)送給全...

    Gemini 評論0 收藏0
  • 如何實現(xiàn)高質(zhì)量電子郵件群發(fā)?這三點需要注意!

    摘要:郵件推送是摩杜云自主研發(fā)的一款簡單高效的電子郵件發(fā)送服務,能幫助你快速精準地實現(xiàn)事務郵件通知郵件和批量郵件的發(fā)送。電子郵件群發(fā)已經(jīng)成為非常普遍的營銷方式,一般來說,用這種方式來給潛在的客戶發(fā)送信息,可以取得比較好的效果。而且電子郵件的用戶數(shù)量龐大,幾乎懂得互聯(lián)網(wǎng)、懂得上網(wǎng)或者正在工作的人都會使用到電子郵件,而且全球使用電子郵件的人數(shù)早已經(jīng)超過了30億人。 這比單純的一些短視頻平臺的流量...

    youkede 評論0 收藏0
  • 電子郵件營銷哪家好?摩杜云如何?

    摘要:現(xiàn)如今,網(wǎng)上有很多郵件營銷服務商,而摩杜云卻是其中一家口碑不錯的服務商,不僅便宜好用,而且還提供小時在線技術(shù)服務。群發(fā)數(shù)量不大,幾千或幾萬封,也可以使用摩杜云郵件推送,專人監(jiān)測,效果更好。近來年,隨著信息化的快速發(fā)展,電子郵件營銷也火爆起來。要知道,電子郵件營銷是一種覆蓋面廣,且成本低、高回報的推廣方式,對此成為了很多企業(yè)不可或缺的營銷工具。那么,電子郵件營銷哪家好呢?下面就讓小杜跟大家介紹...

    yck 評論0 收藏0
  • Python 發(fā)送 email 的三種方式

    摘要:本米撲博客先介紹幾個最簡單的發(fā)送郵件方式記錄下,像郵件,附件等也是支持的,需要時查文檔即可。特別注意命令發(fā)送郵件,默認用端口號,由于阿里云騰訊云等封禁了端口號,因此本示例需在開通端口機器上測試執(zhí)行命令收件結(jié)果 Python發(fā)送email的三種方式,分別為使用登錄郵件服務器、使用smtp服務、調(diào)用sendmail命令來發(fā)送三種方法 本文原文自米撲博客:Python 發(fā)送 email 的三...

    kun_jian 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<