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是另一个强大的库(现已由