在PHP8.5环境下实现邮件发送功能,使用PHPMailer结合SMTP协议是可靠的选择,相比PHP自带的mail函数,这种方式配置更灵活,发送成功率更高,支持附件、HTML内容等丰富的邮件格式。

环境准备与PHPMailer安装
首先需要确保PHP8.5环境已经安装完成,并且开启了openssl扩展,因为SMTP协议通常需要SSL或TLS加密连接,openssl扩展是必要的前置条件。可以通过phpinfo()函数查看扩展是否开启,如果没有开启需要在php.ini配置文件中取消extension=openssl的注释,重启服务后生效。
PHPMailer可以通过Composer进行安装,这是最推荐的方式,执行以下命令即可完成安装:
composer require phpmailer/phpmailer
如果没有使用Composer,也可以从PHPMailer的官方仓库下载源码,将源码目录放到项目的第三方类库目录中,手动引入相关文件即可。
SMTP基础配置参数说明
使用PHPMailer通过SMTP发送邮件需要配置以下核心参数,不同邮箱服务商的参数略有差异:
- SMTP服务器地址:比如QQ邮箱是smtp.qq.com,163邮箱是smtp.163.com
- SMTP端口:常用端口有25、465、587,465端口通常使用SSL加密,587端口通常使用TLS加密
- 发件人邮箱账号:用来发送邮件的邮箱地址
- 邮箱授权码:不是邮箱登录密码,需要在邮箱设置中开启SMTP服务后获取,比如QQ邮箱需要在账户设置中开启POP3/SMTP服务,生成授权码
- 加密方式:根据端口选择对应的加密方式,可选ssl或者tls
完整发送邮件代码示例
以下是一个PHP8.5环境下使用PHPMailer发送普通文本邮件的完整示例,代码中包含了所有必要的配置和错误处理逻辑:
<?php
// 引入PHPMailer的自动加载文件,Composer安装的话使用这个路径
require_once 'vendor/autoload.php';
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
// 实例化PHPMailer对象
$mail = new PHPMailer(true);
try {
// 开启SMTP调试模式,开发阶段可以开启,生产环境关闭
// $mail->SMTPDebug = 2;
// 使用SMTP方式发送
$mail->isSMTP();
// SMTP服务器地址,这里以QQ邮箱为例
$mail->Host = 'smtp.qq.com';
// 开启SMTP认证
$mail->SMTPAuth = true;
// 发件人邮箱账号
$mail->Username = 'your_qq@qq.com';
// 邮箱授权码,替换成你自己的授权码
$mail->Password = 'your_smtp_auth_code';
// 加密方式,465端口对应ssl
$mail->SMTPSecure = 'ssl';
// SMTP端口,465是SSL常用端口
$mail->Port = 465;
// 设置发件人信息,第一个参数是邮箱地址,第二个参数是发件人名称
$mail->setFrom('your_qq@qq.com', '发件人名称');
// 添加收件人,第一个参数是收件人邮箱,第二个参数是收件人名称,可多次调用添加多个收件人
$mail->addAddress('receiver@ippipp.com', '收件人名称');
// 添加回复邮箱,可选
// $mail->addReplyTo('reply@ippipp.com', '回复邮箱');
// 添加抄送人,可选
// $mail->addCC('cc@ippipp.com');
// 添加密送人,可选
// $mail->addBCC('bcc@ippipp.com');
// 设置邮件格式为HTML,如果要发送纯文本设置为false
$mail->isHTML(true);
// 邮件主题
$mail->Subject = 'PHP8.5 SMTP邮件测试';
// 邮件正文,支持HTML标签
$mail->Body = '<h1>这是一封测试邮件</h1><p>使用PHP8.5和PHPMailer通过SMTP协议发送</p>';
// 纯文本备用正文,当收件人邮箱不支持HTML时显示
$mail->AltBody = '这是一封测试邮件,使用PHP8.5和PHPMailer通过SMTP协议发送';
// 发送邮件
$mail->send();
echo '邮件发送成功';
} catch (Exception $e) {
echo '邮件发送失败,错误信息:' . $mail->ErrorInfo;
}
常见问题排查
如果在配置过程中遇到邮件发送失败的情况,可以按照以下步骤排查:
1. 检查扩展是否开启
确认PHP8.5的openssl扩展已经正常开启,缺少该扩展会导致无法建立加密连接。
2. 检查授权码是否正确
很多用户会把邮箱登录密码当成授权码使用,导致认证失败,需要到对应邮箱的后台重新生成SMTP授权码。
3. 检查端口和加密方式是否匹配
如果选择465端口,加密方式需要设置为ssl,选择587端口则加密方式设置为tls,不匹配会导致连接失败。
4. 检查SMTP服务器地址是否正确
不同邮箱服务商的SMTP地址不同,比如企业邮箱的SMTP地址可能和个人邮箱不同,需要确认服务商提供的正确地址。
发送带附件的邮件
如果需要在邮件中添加附件,只需要在发送前调用addAttachment方法即可,示例代码如下:
<?php
// 前面的配置代码和上面示例一致,这里省略
// 添加附件,参数是附件的本地路径,可选第二个参数是附件在邮件中显示的名称
$mail->addAttachment('/path/to/file.pdf', '测试附件.pdf');
// 可以添加多个附件
// $mail->addAttachment('/path/to/image.jpg', '图片.jpg');
按照以上步骤配置完成后,就可以在PHP8.5项目中稳定地使用PHPMailer通过SMTP协议发送邮件了,根据实际需求调整配置参数和邮件内容即可。