PHP发送电子邮件:PHPMailer、mail()函数及替代方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP发送电子邮件:从内置mail()函数到强大的库



发送电子邮件是任何Web应用程序的关键功能之一:用户注册、密码恢复、通知、邮件群发。在PHP中,有几种方法:从最简单的内置函数mail()到专门的库,如PHPMailer和SwiftMailer。在本文中,我们将详细分析每种方法,展示代码示例,并给出选择建议。



1. 内置mail()函数



mail()函数是发送邮件最简单的方法。它使用PHP配置中设置的邮件服务器(sendmail_path或SMTP)。然而,其功能有限,不支持现代需求:HTML格式、附件、SMTP认证。



基本示例

<?php$to = 'user@example.com';$subject = '邮件主题';$message = '你好!这是一封测试邮件。';$headers = 'From: no-reply@mysite.ru' . "\\r" .    'Reply-To: support@mysite.ru' . "\\r" .    'X-Mailer: PHP/' . phpversion();

if (mail($to, $subject, $message, $headers)) { echo '邮件已发送';} else { echo '发送错误';}?>


mail()函数的缺点

  • 不支持HTML邮件(需要手动指定Content-Type: text/html)
  • 无法在不进行复杂MIME操作的情况下附加文件
  • 没有SMTP加密和认证
  • 由于缺少正确的标头,邮件经常进入垃圾邮件
  • 难以调试错误


对于现代项目,不推荐使用mail()。最好使用专门的库。



2. PHPMailer — 黄金标准



PHPMailer是PHP中最流行的发送电子邮件库。它支持SMTP、SSL/TLS、HTML邮件、附件、替代文本、多个收件人等。通过Composer安装:



composer require phpmailer/phpmailer


通过SMTP(Gmail)发送示例

<?phpuse PHPMailer\\PHPMailer\\PHPMailer;use PHPMailer\\PHPMailer\\SMTP;use PHPMailer\\PHPMailer\\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try { // 服务器设置 $mail->SMTPDebug = SMTP::DEBUG_SERVER; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your@gmail.com'; $mail->Password = 'your-app-password'; // 应用密码 $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465;

// 发件人和收件人 $mail->setFrom('from@example.com', '发件人'); $mail->addAddress('user@example.com', '收件人'); $mail->addReplyTo('info@example.com', '信息');

// 附件(可选) $mail->addAttachment('/path/to/file.pdf', 'document.pdf');

// 内容 $mail->isHTML(true); $mail->Subject = '邮件主题'; $mail->Body = '<h1>你好!</h1><p>这封邮件包含<b>HTML</b>内容。</p>'; $mail->AltBody = '你好!这是邮件的文本版本。';

$mail->send(); echo '邮件已发送';} catch (Exception $e) { echo "错误: {$mail->ErrorInfo}";}?>


PHPMailer的优点

  • 完全支持带认证的SMTP
  • 自动生成MIME标头
  • 支持附件和内嵌图片
  • 支持HTML和文本版本的邮件
  • 详细的错误信息
  • 活跃的社区支持


3. SwiftMailer — 架构灵活的替代方案



SwiftMailer是另一个强大的库(现已由

推荐