本文讲解如何简单的在 TP5 中使用 PHPMailer
发送邮件 以 企业QQ邮箱为例
使用方式
- 使用
Composer
安装PHPMailer
- 执行命令
composer require phpmailer/phpmailer
- 执行命令
- 把下列代码复制到项目里 新建一个类
Mailer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* Created by PhpStorm.
* User: 喵♂呜
* Date: 2017/8/23
* Time: 15:30
*/
namespace app\common;
use PHPMailer;
/**
* Class Mailer
* @package app\common
*/
class Mailer {
/**
* @var PHPMailer mail
*/
private static $mail;
/**
* @param $to string 收件人
* @param $name string 收件人名称
* @param $subject string 邮件主题
* @param $body string 邮件内容
* @param null $attachment 附件列表
* @return bool|string
*/
public static function send($to, $name, $subject, $body, $attachment = null) {
if (self::$mail == null) {
self::$mail = new PHPMailer();
$config = config('mail');
self::$mail->CharSet = $config['charset'];
self::$mail->IsSMTP();
self::$mail->SMTPDebug = $config['debug'];
self::$mail->SMTPSecure = $config['secure']; // 使用安全
self::$mail->Host = $config['host']; //
self::$mail->Port = $config['port']; // SMTP服务器的端口号
if ($config['auth']) {
self::$mail->SMTPAuth = true; // 启用 SMTP 验证功能
self::$mail->Username = $config['username'];// SMTP服务器用户名
self::$mail->Password = $config['password'];// SMTP服务器密码
}
self::$mail->setFrom($config['from'], $config['fromname']);
}
self::$mail->Subject = $subject;
self::$mail->MsgHTML($body);
self::$mail->AddAddress($to, empty($name) ? $to : $name);
if (is_array($attachment)) { // 添加附件
foreach ($attachment as $file) {
is_file($file) && self::$mail->AddAttachment($file);
}
}
return self::$mail->Send() ? true : self::$mail->ErrorInfo;
}
} - 在
application/extra
新建mail.php
配置文件 或者直接添加到 根配置(自己看文档)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* Created by PhpStorm.
* User: 喵♂呜
* Date: 2017/8/23
* Time: 15:32
*/
return [
// 设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
'charset' => 'UTF-8',
// SMTP调试功能 0 = 关闭 1 = 错误和消息 2 = 消息
'debug' => '0',
// 协议 Options: '', 'ssl' or 'tls'
'secure' => 'tls',
// SMTP 服务器
'host' => 'smtp.exmail.qq.com',
// SMTP 服务器 端口
'port' => 587,
// 是否需要认证
'auth' => true,
// 用户名
'username' => 'root@yumc.pw',
// 密码
'password' => 'Email2Send',
// 来源地址 QQ邮箱必须设置和用户名相同
'from' => 'root@yumc.pw',
// 来源名称
'fromname' => 'YUMC 插件商城'
]; - 在控制器中直接使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace app\index\controller;
use app\common\Mailer;
class Index {
public function sendmail() {
$result = Mailer::send('admin@yumc.pw', '管理员', '测试邮件', '<h1>测试邮件</h1>')
if($result === true){
return "邮件发送成功!";
}else{
return "邮件发送失败 错误: " . $result;
}
}
}
常见问题
提示
SMTP connect() failed;
请先检查下面两项- 检查 PHP 的
fsockopen
函数是否开启 - 如果用到了
tls
或者ssl
检查openssl
模块是否开启
- 检查 PHP 的
如果是 QQ邮箱 之类的企业邮箱 提示
mail from address must be same as authorization user
错误代码是 501- 请检查
from
和username
是否相同
- 请检查