2025年07月14日/ 浏览 5
在Web开发中,邮件发送是注册验证、订单通知等场景的刚需。虽然PHP自带mail()函数,但存在三个致命缺陷:
PHPMailer作为开源库解决了这些问题,它具有以下优势:
– 支持SMTP认证
– 可添加多个附件
– 内嵌HTML内容和图片
– 完善的错误处理机制
– 全球95%的PHP邮件系统采用
在项目目录执行:
bash
composer require phpmailer/phpmailer
php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require ‘vendor/autoload.php’;
$mail = new PHPMailer(true);
try {
// SMTP配置
$mail->isSMTP();
$mail->Host = ‘smtp.exmail.qq.com’; // SMTP服务器
$mail->SMTPAuth = true;
$mail->Username = ‘your@domain.com’;
$mail->Password = ‘yourpassword’;
$mail->SMTPSecure = ‘ssl’; // 加密方式
$mail->Port = 465; // SMTP端口
// 邮件内容
$mail->setFrom('noreply@domain.com', '系统管理员');
$mail->addAddress('recipient@example.com', '李经理'); // 收件人
$mail->addReplyTo('service@domain.com', '客服中心');
// 添加附件
$mail->addAttachment('/var/www/uploads/contract.pdf'); // 路径附件
$mail->addAttachment($_FILES['file']['tmp_name'], '用户上传.jpg'); // 表单上传
// 邮件内容
$mail->isHTML(true);
$mail->Subject = '2023年度报表 - 请查收';
$mail->Body = '<h1>重要文件</h1><p>附件包含:</p><ul>'
.'<li>Q3财务报告</li><li>客户签约合同</li></ul>';
$mail->AltBody = '请使用HTML邮件客户端查看内容';
$mail->send();
echo '邮件已发送';
} catch (Exception $e) {
echo “发送失败: {$mail->ErrorInfo}”;
}
addAttachment()
方法支持两种形式:
启用调试模式能看到详细交互日志:
php
$mail->SMTPDebug = 2; // 级别1-4
连接超时
认证失败
附件丢失
php
$users = [
[’email’=>’a@test.com’, ‘name’=>’张三’, ‘file’=>’a.pdf’],
//…
];
foreach($users as $user){
$mail->clearAddresses(); // 清空上次收件人
$mail->addAddress($user[’email’], $user[‘name’]);
$mail->addAttachment(‘files/’.$user[‘file’]);
// 其他发送逻辑
}
php
$mail->addEmbeddedImage('logo.png', 'logo_cid');
$mail->Body = '<img src="cid:logo_cid"> 公司标识';