怎样用PHP发送带附件的邮件?PHPMailer完整使用教程

怎样用PHP发送带附件的邮件?PHPMailer完整使用教程
最新回答
中华一样的高傲

2026-03-19 08:10:35

使用 PHPMailer 发送带附件的邮件需完成以下步骤,涵盖安装、配置、发送及调试全流程:

1. 安装 PHPMailer

推荐通过 Composer 安装(需提前安装 Composer):

composer require phpmailer/phpmailer

若无法使用 Composer,可手动下载源码,解压后将 src/ 目录下的文件放入项目,并引入核心类文件:

require 'path/to/PHPMailer/src/PHPMailer.php';require 'path/to/PHPMailer/src/SMTP.php';require 'path/to/PHPMailer/src/Exception.php';

或直接引入自动加载文件(Composer 安装后):

require 'vendor/autoload.php';2. 基础配置与发送流程

核心步骤:

  • 实例化对象
  • 配置 SMTP 参数(如需)
  • 设置发件人、收件人、主题、正文
  • 添加附件(可选)
  • 调用 send() 方法发送

示例代码:

use PHPMailerPHPMailerPHPMailer;use PHPMailerPHPMailerException;$mail = new PHPMailer(true); // 启用异常模式try { // SMTP 配置(以 Gmail 为例) $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your@gmail.com'; // 发件邮箱 $mail->Password = 'your-app-password'; // 应用专用密码(非邮箱密码) $mail->SMTPSecure = 'tls'; $mail->Port = 587; // 发件人与收件人 $mail->setFrom('from@example.com', 'Sender Name'); $mail->addAddress('recipient@example.com', 'Recipient Name'); // 邮件内容 $mail->isHTML(true); $mail->Subject = 'Subject Here'; $mail->Body = '<h1>HTML Content</h1><p>This is a test email.</p>'; $mail->AltBody = 'Plain text alternative for non-HTML clients'; // 添加附件(单个) $mail->addAttachment('/path/to/file.pdf', 'new_name.pdf'); // 可指定显示名 // 发送邮件 $mail->send(); echo 'Email sent successfully!';} catch (Exception $e) { echo "Error: {$mail->ErrorInfo}";}3. 添加多个附件

多次调用 addAttachment() 方法即可:

$mail->addAttachment('/path/to/file1.pdf');$mail->addAttachment('/path/to/image.jpg', 'photo.jpg'); // 自定义显示名$mail->addAttachment('/path/to/report.xlsx');

注意事项:

  • 路径权限:确保 PHP 有权限读取附件文件,可通过 file_exists('/path/to/file') 检查。
  • 大小限制:SMTP 服务商可能限制附件大小(如 Gmail 单封邮件最大 25MB)。
4. 常见问题与调试
  • 邮件未送达:

    检查 SMTP 认证是否启用、用户名/密码是否正确。

    确认加密方式(TLS/SSL)与端口匹配(如 TLS 通常用 587 端口)。

  • 附件未发送:

    使用 file_exists() 验证文件路径。

    检查附件大小是否超过服务商限制。

  • 错误提示“Could not instantiate mail function”:

    服务器未配置 SMTP 或禁用 mail() 函数,建议始终使用 SMTP 方式。

  • 开启调试模式:在实例化后添加 $mail->SMTPDebug = 2;,输出详细日志(0=关闭, 1=错误, 2=客户端消息, 3=连接信息, 4=全部)。
5. 完整代码模板use PHPMailerPHPMailerPHPMailer;use PHPMailerPHPMailerException;require 'vendor/autoload.php';$mail = new PHPMailer(true);try { // SMTP 配置(示例为 QQ 邮箱) $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; $mail->SMTPAuth = true; $mail->Username = 'your@qq.com'; $mail->Password = 'your-authorization-code'; // QQ 邮箱需生成授权码 $mail->SMTPSecure = 'ssl'; $mail->Port = 465; // 发件人与收件人 $mail->setFrom('from@qq.com', 'Sender'); $mail->addAddress('recipient@example.com'); // 邮件内容 $mail->Subject = 'Test with Attachment'; $mail->Body = 'This email contains attachments.'; // 添加多个附件 $mail->addAttachment('/path/to/doc.pdf'); $mail->addAttachment('/path/to/image.png', 'logo.png'); $mail->send(); echo 'Email sent!';} catch (Exception $e) { echo "Error: {$mail->ErrorInfo}";}总结

PHPMailer 通过封装 SMTP 协议简化了邮件发送流程,尤其适合处理附件和 HTML 内容。关键点包括:

  • 正确配置 SMTP 参数(服务器、认证、加密)。
  • 使用 addAttachment() 添加附件时确保路径和权限正确。
  • 通过调试模式快速定位问题。

按此流程操作,即可高效实现带附件的邮件发送功能。