在php项目开发中,实现邮件发送功能是非常常见的需求,原生mail函数配置复杂且兼容性差,使用PHPMailer库可以简化整个流程,同时支持smtp认证、附件添加、HTML格式内容等实用功能,下面详细介绍具体实现步骤。

一、PHPMailer安装
目前主流的安装方式是使用Composer,执行以下命令即可将PHPMailer引入项目:
composer require phpmailer/phpmailer
如果没有使用Composer,也可以到PHPMailer的官方仓库下载源码包,将src目录下的文件放到项目对应目录,手动引入使用。
二、SMTP基础配置步骤
配置smtp是使用PHPMailer发送邮件的核心步骤,需要准备对应邮箱的smtp服务器地址、端口、账号和授权码,以下是完整的配置示例代码:
<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require 'vendor/autoload.php'; // 如果是手动引入则替换为对应路径
$mail = new PHPMailer(true);
try {
// 服务器配置
$mail->SMTPDebug = 0; // 调试模式 0关闭 1客户端 2服务端 3详细
$mail->isSMTP();
$mail->Host = 'smtp.ipipp.com'; // 邮箱smtp服务器地址,比如qq邮箱是smtp.qq.com
$mail->SMTPAuth = true;
$mail->Username = 'test@ipipp.com'; // 发件邮箱账号
$mail->Password = '邮箱授权码'; // 不是邮箱登录密码,是smtp授权码
$mail->SMTPSecure = 'ssl'; // 加密方式 tls或者ssl
$mail->Port = 465; // 端口 ssl一般是465 tls一般是587
$mail->CharSet = 'UTF-8';
// 收件人配置
$mail->setFrom('test@ipipp.com', '发件人名称');
$mail->addAddress('receive@ipipp.com', '收件人名称'); // 可添加多个收件人
$mail->addReplyTo('test@ipipp.com', '回复地址');
// 邮件内容配置
$mail->isHTML(true);
$mail->Subject = '测试邮件主题';
$mail->Body = '<h1>这是一封测试邮件</h1><p>邮件内容支持HTML格式</p>';
$mail->AltBody = '这是纯文本格式的邮件内容,用于不支持HTML的邮件客户端';
$mail->send();
echo '邮件发送成功';
} catch (Exception $e) {
echo '邮件发送失败,错误信息:' . $mail->ErrorInfo;
}
三、添加附件的实现方式
PHPMailer提供了addAttachment方法来添加附件,支持单个附件和多个附件的添加,以下是具体示例:
1. 添加单个附件
在邮件内容配置完成后,发送邮件前添加以下代码即可:
// 添加单个附件,第一个参数是文件路径,第二个参数是附件在邮件中显示的名称(可选)
$mail->addAttachment('/path/to/file/test.pdf', '测试文档.pdf');
2. 添加多个附件
多次调用addAttachment方法即可实现多附件添加:
// 添加多个附件
$mail->addAttachment('/path/to/file/report.xlsx', '月度报表.xlsx');
$mail->addAttachment('/path/to/file/image.jpg', '示例图片.jpg');
$mail->addAttachment('/path/to/file/code.zip', '源码包.zip');
四、常见配置问题排查
- 如果提示连接smtp服务器失败,检查Host地址和Port端口是否正确,确认服务器是否开放对应端口
- 如果提示认证失败,确认Password填写的是邮箱的smtp授权码,不是邮箱登录密码,不同邮箱开启smtp获取授权码的方式不同
- 如果附件添加失败,检查文件路径是否正确,服务器是否有文件读取权限
- 如果中文内容乱码,确认CharSet设置为UTF-8,且文件本身编码为UTF-8
五、注意事项
不同邮箱服务商的smtp配置参数有差异,比如163邮箱的smtp地址是smtp.163.com,端口需要根据加密方式选择,使用前建议先查阅对应邮箱的smtp帮助文档。另外不要频繁发送邮件,避免被邮箱服务商判定为垃圾邮件导致账号被限制。