PHP利用PHPMailer通过163 SMTP服务器发送邮件教程

小林子
小林子
发布时间:2026-10-14 | 3人浏览过
原创

在使用PHP进行后端开发时,邮件通知是常见功能。传统的mail()函数往往受限于系统环境配置(如需安装sendmail且容易进入垃圾箱)。本文将演示如何利用PHPMailer类库,结合网易163 SMTP服务器实现稳定、可靠的邮件发送,提供详细的配置参数与完整代码示例。

为什么选择PHPMailer与163 SMTP

原生PHP的mail()函数虽然简单,但在现代网络环境下存在诸多限制:

  • 垃圾邮件过滤:直接使用服务器IP发送邮件,极易被QQ、腾讯等主流服务商判定为垃圾邮件并拦截。
  • 环境依赖:通常依赖本地安装的Sendmail或Postfix服务,配置复杂且易出错。
  • 身份验证:许多现代SMTP服务器强制要求SSL/TLS加密及账号密码验证,原生函数支持较弱。

相比之下,PHPMailer是一个成熟的第三方库,支持HTML邮件、附件、多种编码及主流SMTP服务。在实际操作中,经过对比测试:
- QQ SMTP:严格的风控策略常导致邮件直接被拒。
- Gmail SMTP:对于非Google Workspace账号,开启POP3/IMAP后仍需处理应用专用密码或两步验证,配置门槛较高。
- 163 SMTP:国内访问速度快,配置相对宽松,适合个人开发者及中小企业测试与生产环境使用。

准备工作

第1步:获取PHPMailer库文件

PHPMailer不再直接托管于sourceforge(该链接可能失效),建议从GitHub下载最新版或通过Composer安装。若采用手动引入方式,需下载以下核心文件并存入项目目录:
- class.phpmailer.php:主类文件。
- class.smtp.php:SMTP驱动文件。

注意:请确保文件夹结构正确,通常包含在PHPMailer根目录下。

第2步:开通163邮箱SMTP服务

登录你的163邮箱网页版,进入设置 → POP3/SMTP/IMAP。
- 勾选“开启SMTP服务”。
- 系统会提示设置客户端授权密码(非登录密码),请妥善保存此密码,后续代码中需使用。

PHPMailer发送代码实现

以下代码展示了初始化配置、连接163 SMTP服务器并发送HTML格式邮件的完整流程。请根据实际账号信息替换代码中的占位符。

<?php
require_once "path/to/PHPMailer/class.phpmailer.php";
require_once "path/to/PHPMailer/class.smtp.php";

// 1. 创建实例
$mail = new PHPMailer();

// 2. 设置SMTP模式
$mail->IsSMTP();
$mail->Host = 'smtp.163.com'; // 设置SMTP服务器地址
$mail->SMTPAuth = true; // 启用身份验证
$mail->Username = 'yourname@163.com'; // 你的163邮箱账号
$mail->Password = 'your_auth_code'; // 填写的是SMTP授权密码,而非登录密码

// 3. 可选:安全加密(163推荐使用465端口SSL或587端口STARTTLS)
$mail->SMTPSecure = 'ssl'; // 如果端口用465,必须开启SSL
$mail->Port = 465; // 465 (SSL) 或 587 (TLS)

// 4. 字符集设置
$mail->CharSet = 'UTF-8';

// 5. 发件人信息
$mail->From = 'yourname@163.com';
$mail->FromName = 'Your Name'; // 发件人显示名称

// 6. 收件人设置
$mail->AddAddress('recipient@qq.com', 'Recipient Name'); // 添加收件人

// 7. 邮件内容
$mail->Subject = 'PHPMailer测试邮件';
$mail->Body = '<h1>这是一封来自PHPMailer的测试</h1><p>内容正常显示即配置成功。</p>';
$mail->IsHTML(true); // 设置为HTML格式

// 8. 发送
if(!$mail->Send()) {
echo "发送失败: " . $mail->ErrorInfo;
exit;
}
echo "邮件已成功发送至 " . $mail->ErrorInfo;
?>

关键参数说明与排查

  • 授权密码 vs 登录密码:这是最常见的错误来源。代码中的Password字段必须是你在163后台设置的“客户端授权密码”,而非网页登录密码。
  • From字段一致性:某些SMTP服务器要求From地址必须与Username一致,否则可能被拒绝投递。请保持两者对应。
  • 端口与加密匹配:若使用Port 465,必须设置SMTPSecure = 'ssl';若使用Port 587,通常设置SMTPSecure = 'tls'或直接留空由库自动协商。
  • 调试模式:若发送失败,可添加$mail->SMTPDebug = 2;查看详细的SMTP交互日志,便于定位是网络问题还是认证错误。

以上就是利用PHPMailer和163 SMTP服务器实现PHP邮件发送的详细内容,更多关于PHP邮件开发优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表