composer require nette/mail
Mail
体<?php /** * Created by PhpStorm. * User: 邓尘锋 * Date: 19-7-5 * Time: 上午11:57 * surest.cn */ namespace app\common\server; use Nette\InvalidArgumentException; use Nette\Mail\Message; class Mail extends Message { public $config; // [String] e-mail protected $from; // [Array] e-mail list protected $to; protected $title; protected $body; public function __construct($to) { $host = config('email.username'); $this->setFrom("{$host}", "D88科技") ->setHeader("name", $host); if ( is_array($to) ) { foreach ($to as $email) { $this->addTo($email); } } else { $this->addTo($to); } } public function from($from=null) { if ( !$from ) { throw new InvalidArgumentException("邮件发送地址不能为空!"); } $this->setFrom($from); return $this; } public static function to($to=null) { if ( !$to ) { throw new InvalidArgumentException("邮件接收地址不能为空!"); } return new Mail($to); } public function title($title=null) { if ( !$title ) { throw new InvalidArgumentException("邮件标题不能为空!"); } $this->setSubject($title); return $this; } public function content($content=null) { if ( !$content ) { throw new InvalidArgumentException("邮件内容不能为空!"); } $this->setHTMLBody($content); return $this; } }
Mailer
发送类<?php /** * Created by PhpStorm. * User: chenf * Date: 19-7-16 * Time: 下午3:35 */ namespace app\common\server; use Nette\Mail\Message; use Nette\Mail\SmtpMailer; /** * * 使用: * $mail = Mail::to($emails)->title("错误预警")->content($html); * Mailer::setMailer()->send($mail); * * Class Mailer * @package app\common\server */ class Mailer { /** * 实例化一个Mailer类 * @return SmtpMailer */ public static function setMailer() { # 这里的配置读取的是config配置 $mailer = new SmtpMailer([ 'host' => config('email.host'), 'username' => config('email.username'), 'password' => config('email.password'), 'secure' => config('email.secure') ]); return $mailer; } /** * 发送 * @param Message $mail */ public function send(Message $mail) { $this->send($mail); } }
'host' => 'smtp.exmail.qq.com', // 用的是qq的smtp服务器 'username' => 'username', 'password' => 'password', 'secure' => 'ssl' // ssl 是 445 端口, 如不设置, 默认端口是 22 , 可参见源码
// $emails 是一个数组 // Mail Message 体 $mail = Mail::to($emails)->title("错误预警")->content($html); // 发送 Mailer::setMailer()->send($mail);
若是直接使用如上方法, 采用的是同步发送的机制, 若是须要采用异步队列进行发送邮件, 我提供以下解决思路php
了解一下 ,
生产者消费者模式