PHP 使用 PHPMailer 发送电子邮件

1. PHPMailer 介绍

phpMailer 是一个非常强大的 php 发送邮件扩展包,可以设定发送邮件地址、回复地址、邮件主题、html邮件内容和上传附件等,使用起来非常方便。它目前有着有近 4 千万的下载量,是 PHP 开发者实现邮件发送功能的首选扩展包

它对 PHP 版本的要求也很低,只要 PHP 版本大于等于 5.5 就能使用,是一个非常优秀的邮件发送扩展包

Packagist 传送地址 : phpmailer/phpmailer - Packagist

复制代码
  1. composer require phpmailer/phpmailer
2. 发送邮件代码示例

下面是发送邮件比较完整的代码,以 QQ邮箱作为 SMTP 服务器发送邮件

复制代码
  1. use PHPMailer\PHPMailer\PHPMailer;
  2. use PHPMailer\PHPMailer\SMTP;
  3. use PHPMailer\PHPMailer\Exception;
  4. try {
  5. $mail = new PHPMailer(true);
  6. //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
  7. $mail->CharSet = 'UTF-8';
  8. # 服务器设置
  9. //启用详细调试输出
  10. //$mail->SMTPDebug = SMTP::DEBUG_SERVER;
  11. // 使用SMTP发送
  12. $mail->isSMTP();
  13. //要发送的SMTP服务器
  14. $mail->Host = 'smtp.qq.com';
  15. //启用SMTP身份验证
  16. $mail->SMTPAuth = true;
  17. //SMTP用户名
  18. $mail->Username = '754081611@qq.com';
  19. //SMTP密码
  20. $mail->Password = 'mftcnkcrrcixxxxx';
  21. //启用隐式TLS加密
  22. $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
  23. //要连接到的TCP端口
  24. $mail->Port = 465;
  25. #发件人信息
  26. $mail->setFrom('23426945@qq.com', '又拍云');
  27. #收件人列表,可将邮件发送给多个邮箱,命令格式:
  28. //$mail->addAddress('收件人邮箱', '姓名');
  29. $mail->addAddress('848978691@qq.com', '李知恩');
  30. $mail->addAddress('3276205785@qq.com', '灰太狼的羊');
  31. #回复地址
  32. $mail->addReplyTo('23426945@qq.com', '李钟硕');
  33. #抄送人列表
  34. $mail->addCC('itqaqcom@163.com', '你的欲梦');
  35. # 邮件内容
  36. //电子邮件格式设置为HTML
  37. $mail->isHTML(true);
  38. //邮件标题
  39. $mail->Subject = '又拍云密码重置校验';
  40. //邮件内容
  41. $code = mt_rand(100000, 999999);
  42. $mail->Body = "您的验证码为: <b>{$code}</b>";
  43. //这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
  44. $mail->AltBody = "您的验证码为: {$code}";
  45. #发送邮件
  46. $mail->send();
  47. echo '邮件发送成功';
  48. } catch (\Exception $e) {
  49. // $e->getMessage() // 异常信息
  50. // $mail->ErrorInfo // 邮件发送失败错误信息
  51. echo "邮件发送失败: {$mail->ErrorInfo}";
  52. }
3. 邮件内容样式模板

邮件的内容一般都不是纯文本,会具有一定的样式,如下图所示,那么具有内容的样式应该怎么来做呢 ?

发送邮件时,邮件内容支持设置带有 HTML 标签,我们只需要传入带有样式的 HTML 内容

可以提前编写好样式,最后压缩为一行,部分内容作为变量(如: 验证码),然后作为邮件内容发送

在线压缩 HTML 代码 : Html在线美化压缩、转js - 在线工具

复制代码
  1. <!-- 编写的样式 -->
  2. <style>
  3. .box {
  4. text-align: center;
  5. border: 1px solid red;
  6. padding: 15px 0;
  7. width: 450px;
  8. margin: 0 auto;
  9. }
  10. .title {
  11. color: red;
  12. font-weight: bold;
  13. text-align: center;
  14. margin-bottom: 10px;
  15. }
  16. </style>
  17. <div class="box">
  18. <div class="title">密码重置</div>
  19. <div class="code">验证码: 123456</div>
  20. </div>
  21. <!-- 压缩后 -->
  22. <style>.box{text-align:center;border:1px solid red;padding:15px 0;width:450px;margin:0 auto}.title{color:red;font-weight:700;text-align:center;margin-bottom:10px}</style><div class="box"><div class="title">密码重置</div><div class="code">验证码: 123456</div></div>

当我们不想自己编写邮件内容模板样式时,可以扒取其他平台的邮件模板

扒取又拍云邮件模板举例 : 我要做一个通过邮件找回密码的功能,又不想自己写这个邮件模板样式,于是我找到 又拍云 的重置密码邮件模板,扒取下来,在它的基础上进行修改,省时省力,何乐而不为

在又拍云平台重置密码,得到一个重置密码的邮件,在控制台查看元素可发现:邮件内容为下图所标记的部分,将元素复制出来后进行修改即可

4. 验证码邮件模板

又拍云验证码模板
复制代码
  1. <div style="padding: 66px 0; width: 100%; background-color: #ededed; color: #777;" align="center">
  2. <div style="width: 700px; background-color: #fff; text-align: left;margin: 0 auto;padding: 20px 0;">
  3. <div style="margin: 30px 60px; width:580px; ">
  4. <strong>亲爱的 duxiu,</strong>
  5. <p style="font-size: 14px; color: #777; line-height: 26px;">您正在通过邮件找回又拍云密码。</p>
  6. <p style="font-size: 14px; color: #777; line-height: 26px;">请在重置密码的页面中输入以下 <strong>验证码</strong>
  7. 和新的密码,完成密码重设:</p>
  8. <p
  9. style="font-size: 20px; color: #777; line-height: 50px; border: 1px solid #24b0cf; background: #fafafa; text-align: center;">
  10. <span style="color: #24b0cf; font-weight: bold;">657475</span>
  11. </p>
  12. <p style="font-size: 14px; color: #aaa; line-height: 16px;">(此验证码有效时间为 60 分钟,若超时请重新获取邮件) </p>
  13. <p style="font-size: 14px; color: #777; line-height: 26px;">如果您要放弃重设密码,或者未曾申请密码重设,请忽略此邮件。</p>
  14. <p style="font-size: 14px; color: #777; line-height: 26px;">
  15. <strong>为了您的账户安全,请您注意对此邮件内容保密。</strong>
  16. </p>
  17. </div>
  18. </div>
  19. </div>
相关推荐
BingoGo20 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack20 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端