ThinkPHP集成PHPMailer实现163与QQ邮箱收发邮件

周予安
周予安
发布时间:2026-10-13| 4人浏览过
原创

本文介绍如何在ThinkPHP框架中集成PHPMailer组件,通过SMTP协议实现163和QQ企业或个人邮箱的收发邮件功能。内容涵盖服务商账号配置、授权密码获取、代码实现及调试方法。

一、前期环境配置

发送邮件前,需确保服务器具备外网访问权限,并从官方源获取PHPMailer组件。将解压后的PHPMailer文件夹放入项目Vendor目录下(或自行引入核心类文件),重点关注 class.phpmailer.php、class.pop3.php 和 class.smtp.php 三个基础文件。

第1步:163(网易)邮箱设置

163邮箱需开启POP3/SMTP/IMAP服务并生成专用授权密码:

完成验证后,系统会弹出生成的授权密码页面:

若发件人未设置昵称,在发送邮件时可能提示无法发送,建议提前设置个人签名信息:

第2步:QQ邮箱设置

QQ邮箱同样需要开启SMTP服务并设置独立密码,以用于程序登录验证:

具体服务器地址与端口参数如下:

注意:不同服务商对安全要求不同,务必使用“授权码”或“独立密码”而非原始登录密码。

二、ThinkPHP核心代码实现

配置主要分为三个部分:前端交互表单、全局参数配置以及后端发送逻辑。

第3步:编写HTML接收表单

创建一个简单的POST表单用于收集收件人、主题和内容:

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>发送测试</title>
</head>
<body>
 <form action="__URL__/add" method="post" enctype="multipart/form-data">
 收件人邮箱:<input type="text" name="mail"/><br/>
 邮件标题:<input type="text" name="title"/><br/>
 邮件内容:<input type="text" name="content"/><br/>
 <input class="button" type="submit" value="发送"/>
 </form>
</body>
</html>

第4步:定义全局邮件配置

在ThinkPHP的配置文件中添加以下常量,区分163与QQ邮箱的参数:

【163邮箱配置示例】

'MAIL_HOST' =>'smtp.163.com',    // SMTP服务器名称
'MAIL_SMTPAUTH' =>TRUE,           // 启用SMTP认证
'MAIL_USERNAME' =>'yourname@163.com', // 发件人邮箱账号
'MAIL_PASSWORD' =>'YOUR_AUTH_CODE',      // 客户端授权密码(非登录密码)
'MAIL_FROM' =>'yourname@163.com',     // 发件人地址(同用户名)
'MAIL_FROMNAME'=>'网站管理员',              // 发件人显示昵称
'MAIL_CHARSET' =>'utf-8',        // 字符集编码
'MAIL_ISHTML' =>TRUE,             // 是否支持HTML格式

【QQ邮箱配置示例】

'MAIL_HOST' =>'smtp.qq.com',
'MAIL_SMTPAUTH' =>TRUE,
'MAIL_USERNAME' =>'yourqqnumber@qq.com',
'MAIL_PASSWORD' =>'YOUR_QQ_AUTH_CODE',   // QQ独立密码
'MAIL_FROM' =>'yourqqnumber@qq.com',
'MAIL_FROMNAME'=>'站点客服',
'MAIL_CHARSET' =>'utf-8',
'MAIL_ISHTML' =>TRUE,

第5步:封装公共发送函数

在Home/Common/function.php或其他公共文件中引入类库并封装发送逻辑:

/*
 * 通用邮件发送函数
 * @param string $to 收件人邮箱
 * @param string $title 邮件主题
 * @param string $content 邮件正文
 */
function sendMail($to, $title, $content) {
 // 加载第三方类库
 Vendor('PHPMailer.PHPMailerAutoload');
 
 $mail = new PHPMailer();
 $mail->IsSMTP();                          // 启用SMTP
 $mail->Host = C('MAIL_HOST');             // 服务器地址
 $mail->SMTPAuth = C('MAIL_SMTPAUTH');     // 开启认证
 $mail->Username = C('MAIL_USERNAME');     // 账号
 $mail->Password = C('MAIL_PASSWORD');     // 密码/授权码
 $mail->From = C('MAIL_FROM');             // 发件人
 $mail->FromName = C('MAIL_FROMNAME');     // 发件昵称
 
 $mail->AddAddress($to);                   // 添加收件人
 $mail->WordWrap = 50;                     // 自动换行长度
 $mail->IsHTML(C('MAIL_ISHTML'));          // HTML格式
 $mail->CharSet = C('MAIL_CHARSET');       // 编码
 $mail->Subject = $title;                  // 主题
 $mail->Body = $content;                   // 内容
 $mail->AltBody = "如果无法查看此邮件,请使用支持的邮件客户端"; // 纯文本备用体
 
 // 执行发送并返回布尔值
 return ($mail->Send());
}

第6步:控制器方法调用

在处理表单提交的Action中进行调用:

public function add() {
 if (isset($_POST['mail'])) {
  $result = sendMail(
   $_POST['mail'],
   $_POST['title'],
   $_POST['content']
  );
  
  if($result) {
   $this->success('邮件发送成功!');
  } else {
   // 捕获详细错误信息便于排查
   $this->error('发送失败: ' . $mail->ErrorInfo);
  }
 } else {
  $this->display(); // 显示表单页
 }
}

三、排错与注意事项

  • 端口问题:默认情况下SMTP使用25端口。若连接超时,可尝试在配置中添加 $mail->Port = 465; 并开启SSL/TLS加密($mail->SMTPSecure = 'ssl';)。
  • 授权密码:切勿混淆“登录密码”与“客户端授权密码”。一旦修改过邮箱登录密码或开启安全锁,需重新生成授权码。
  • 垃圾邮件拦截:新注册的账号频繁发送相同内容可能被标记为垃圾邮件,建议初期测试时使用自己的邮箱作为收件人,并确保邮件内容有实质性差异。

以上就是ThinkPHP基于PHPMailer实现163和QQ邮箱邮件发送功能的详细内容,更多关于PHP高级应用技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。