목차
1. 환경 설명
2. tp는 이메일 전송을 구현합니다
2.3
2.2 참고 클릭
2.4 호출 결과
3. swoole과 결합하여 비동기식 대량 전송을 구현합니다.
3.1 swoole 설치
3.2에 대한 포털을 구성하여 비동기 대량 전송
3.3 서버 열기
4、后记~
백엔드 개발 PHP 튜토리얼 thinkphp5와 swoole을 이용한 비동기식 대량 메일링 구현 방법

thinkphp5와 swoole을 이용한 비동기식 대량 메일링 구현 방법

Mar 14, 2018 pm 01:03 PM
php swoole thinkphp5

이 글은 주로 thinkphp5와 swoole의 비동기 대량 메일링 구현 방법을 공유합니다. 도움이 되길 바랍니다.


1. 환경 설명

Alibaba Cloud centos7
thinkphp5.0.11
swoole2.0.8

2. tp는 이메일 전송을 구현합니다

프로젝트 아래에 다음 파일 디렉터리를 만듭니다.

그중 SendM ail.php는 이메일을 보내기 위해 실제로 호출하는 파일입니다. 주요 코드는 다음과 같습니다.

namespace app\library\utils\mail;use app\library\utils\mail\PhpMailer;use app\library\utils\mail\Smtp;use think\Log;

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.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 프로토콜이므로 패키징 수준은 그다지 포괄적이지 않고 유연성도 없습니다. 그림의 다른 두 파일(PhpMailer.php 및 Smtp.php)은 호출을 단순화하기 위해 Phpmailer 이메일 전송 클래스의 핵심 파일입니다. 자세한 사용법 및 매개변수 설정은 gayhub의 사용법을 참조하세요. 지침 for phpmailer

2.2 참고 클릭

이 단계에서는 몇 가지 사항에 주의해야 합니다. 1. 이메일을 보내도록 설정한 계정이 SMTP를 활성화했는지 여부와 해당 보안 프로토콜 및 포트 번호를 찾습니다. 2. 현재 서버가 일부 소켓 기능의 영향을 받는 경우가 많은 SMTP 서비스를 지원하는지 여부 문제가 발생하면 SMTPDebug 매개변수를 1로 설정한 다음 디버그 정보를 기반으로 신중하게 디버그해야 합니다. 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 문서 포털
이 설치된 후 IDE에 swoole 코드 프롬프트를 추가하고 IDE 프롬프트 swoole code

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\n";
        });

        $serv->on(&#39;task&#39;, function ($serv, $task_id, $from_id, $data) {            echo "接收异步任务[id=$task_id]".PHP_EOL;            for ($i = 0 ; $i<20;$i++){                if(SendMail::postmail(&#39;937069176@qq.com&#39;,&#39;test&#39;,$data)){                    echo &#39;send&#39;.$i.&#39; success&#39;."\n";
                }else{                    echo &#39;send&#39;.$i.&#39; fail&#39;."\n";
                }
        }
        $serv->finish(&#39;&#39;);
        });

        $serv->on(&#39;finish&#39;, function ($serv, $task_id, $data) {            echo "异步任务[id=$task_id]完成".PHP_EOL;
        });

        $serv->start();
    }
로그인 후 복사

서버 측에서는 20개의 루프를 사용하여 대량 전송을 시뮬레이션합니다. 실제로는 다른 이메일 주소로 변경하면 됩니다.
이제 클라이언트를 구현합니다

    /**
     * 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 &#39;error!connect to swoole_server failed&#39;;
        } else {
            $client->send(&#39;blue&#39;);//这里只是简单的实现了发送的内容
        }
    }
로그인 후 복사

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中有不足的地方,还请指出。

위 내용은 thinkphp5와 swoole을 이용한 비동기식 대량 메일링 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles