国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

thinkphp5+swoole實現異步郵件群發(SMTP方式)

tuniutech / 918人閱讀

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

1、環境說明

阿里云centos7
thinkphp5.0.11
swoole2.0.8

2、tp實現郵件發送

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

其中SendMail.php是我們實際調用的發送郵件的文件。以下是主要代碼:

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文件中,具體配置內容如下:

 //郵箱設置
    "mail"=>[
        "CharSet"=>"UTF-8",
        "SMTPDebug"=>0,// 啟用SMTP調試功能 0關閉
        "SMTPAuth"=>true,// 啟用 SMTP 驗證功能
        "SMTPSecure"=>"ssl",// 安全協議
        "Host"=>"smtp.163.com",// SMTP 服務器
        "Port"=>465,// SMTP服務器的端口號
        "Username"=>"**********",// SMTP服務器用戶名
        "Password"=>"**********",// SMTP服務器密碼
        "From"=>"*********@163.com",// 發件人郵箱
        "Name"=>"blue",// 發件人郵箱
    ]
2.1

這里我們只是實現了smtp協議發送的demo,所以在封裝的層面上沒有做到很全面,不是很靈活。圖中其他兩個文件(PhpMailer.php和Smtp.php)是Phpmailer郵件發送類的核心文件,為了簡化調用,抽取了出來,詳細的用法和參數設置,可以參考gayhub的使用說明phpmailer

2.2 注意點

在此步驟中,我們需要注意幾點:1是你設置的郵件發送的賬號是否已經開啟SMTP并且找對對應的安全協議和端口號。2、當前服務器是否支持SMTP服務,這邊很多時候會受一些socket函數的影響,遇到問題的時候,我們應該把SMTPDebug參數設置為1,然后根據debug信息去細心調試。3、發出的郵件有些會被放入垃圾箱,注意查收。

2.3 調用

建立如下的文件目錄結構:

在Index.php中調用發送郵件的方法,具體代碼如下

public function sendMail(){
        if(SendMail::postmail("937069176@qq.com","test","123")){
            echo "send success";
        }else{
            echo "send fail";
        }
    }
2.4 調用結果

我們可以在QQ郵箱的垃圾箱中找到我們剛剛發送的一封郵件

3、結合swoole實現異步群發 3.1安裝swoole

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

3.2實現異步群發

我們先實現異步的服務端:

    /**
     * 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("937069176@qq.com","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來模擬了群發,實際換成不同的email地址就可。
下面我們實現客戶端

    /**
     * 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");//這里只是簡單的實現了發送的內容
        }
    }
3.3開啟服務端

這里必須要用CLI方式,我們進入項目的根目錄。
執行

netstat -apn | grep 8082

先監測一下8082端口是否被占用,如果占用則

kill -9 PID(進程號)

殺死進程

然后我們執行

php public/index.php index/index/syncSend

這條命令的作用是用cli模式來使我們的8082端口處于監聽狀態。且保持這個終端處于活躍狀態,這樣方便我們查看發送的結果。

接著我們可以用CLI或者瀏覽器訪問的方式來訪問我們的客戶端

php public/index.php index/index/index

當我們執行一次的時候客戶端的時候,我們可以在服務端的終端看到屏幕上面出現如下的畫面:

說明我們已經正常群發了。
下面,我們就來測試異步,因為163服務器會對IP進行檢測,如果在某個時間發送也別頻繁的話,會出現發送失敗的情況,所以我們測試的時候,采用連續執行4次客戶端的方式
下面是執行的結果:


從圖中發送的順序來看,我們可以很容易的判斷,我們已經實現了異步的發送。
郵箱里面也接收到了剛剛發送的郵件。

4、后記~

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30630.html

相關文章

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

    摘要:此接口主要用于客服等有人工消息處理環節的功能,方便開發者為用戶提供更加優質的服務。不支持廣告等營銷類消息以及其它所有可能對用戶造成騷擾的消息。 1、關于群發接口和消息接口 關于群發接口1.訂閱號每天可以群發消息一條,服務號每月(自然月)四條的群發權限。開發者模式下,可以通過高級群發接口,實現更靈活的群發能力。2.注意● 對于認證訂閱號,群發接口每天可成功調用1次,此次群發可選擇發送給全...

    Gemini 評論0 收藏0
  • 如何實現高質量電子郵件群發?這三點需要注意!

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

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

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

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

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

    kun_jian 評論0 收藏0

發表評論

0條評論

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