PHP利用PHPMailer通过163 SMTP服务器发送邮件教程
在使用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驱动文件。
第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邮件开发优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













