PHP发送电子邮件是Web开发中常见的需求,无论是用户注册验证、订单通知还是系统告警,都可以通过邮件触达用户。目前PHP实现邮件发送主要有两种主流方案,开发者可以根据项目场景选择适合的方式。

一、使用PHP内置mail函数发送邮件
PHP自带的mail()函数是最基础的邮件发送方式,不需要额外安装第三方库,但是依赖服务器本地的邮件发送配置,功能相对简单。
1. 函数基本语法
mail()函数的基本语法如下:
<?php // mail函数语法 // to: 收件人邮箱地址 // subject: 邮件主题 // message: 邮件正文内容 // headers: 可选,邮件头信息,比如发件人、抄送等 // parameters: 可选,额外的发送参数 mail(string $to, string $subject, string $message, array|string $headers = [], string $parameters = ""): bool ?>
2. 简单发送示例
以下是一个使用mail()函数发送纯文本邮件的示例:
<?php
// 收件人邮箱
$to = "user@ipipp.com";
// 邮件主题
$subject = "PHP测试邮件";
// 邮件正文
$message = "这是一封通过PHP内置mail函数发送的测试邮件";
// 邮件头信息,设置发件人
$headers = "From: sender@ipipp.com" . "rn" .
"Reply-To: sender@ipipp.com" . "rn" .
"X-Mailer: PHP/" . phpversion();
// 发送邮件
if (mail($to, $subject, $message, $headers)) {
echo "邮件发送成功";
} else {
echo "邮件发送失败";
}
?>
3. 注意事项
- 使用
mail()函数前需要确保服务器已经配置了邮件发送服务,比如Linux系统下的sendmail或者Postfix,否则函数会返回发送失败。 - 这种方式发送的邮件很容易被收件方邮箱判定为垃圾邮件,因为发件服务器没有经过SPF、DKIM等验证。
- 不支持发送附件、HTML格式邮件等复杂需求,功能扩展性较差。
二、使用SMTP协议发送邮件
SMTP是邮件发送的标准协议,通过第三方SMTP服务器发送邮件,稳定性和到达率都更高,也支持更多复杂功能,是生产环境常用的方案。这里以PHPMailer库为例讲解实现方式。
1. 安装PHPMailer
可以通过Composer安装PHPMailer,执行以下命令:
composer require phpmailer/phpmailer
2. 发送邮件示例
以下是使用PHPMailer通过SMTP发送邮件的完整示例,包含HTML正文和附件发送:
<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
// 引入自动加载文件
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// 服务器配置
$mail->SMTPDebug = 0; // 关闭SMTP调试输出,生产环境设为0
$mail->isSMTP(); // 使用SMTP发送
$mail->Host = 'smtp.ipipp.com'; // SMTP服务器地址
$mail->SMTPAuth = true; // 开启SMTP认证
$mail->Username = 'sender@ipipp.com'; // SMTP用户名
$mail->Password = 'smtp_password'; // SMTP密码或授权码
$mail->SMTPSecure = 'tls'; // 加密方式,可选tls或ssl
$mail->Port = 587; // SMTP端口,tls对应587,ssl对应465
// 收件人配置
$mail->setFrom('sender@ipipp.com', '发件人名称');
$mail->addAddress('user@ipipp.com', '收件人名称'); // 添加收件人
$mail->addReplyTo('sender@ipipp.com', '回复地址');
// 邮件内容配置
$mail->isHTML(true); // 设置邮件格式为HTML
$mail->Subject = 'PHP SMTP测试邮件';
$mail->Body = '<h1>邮件正文</h1><p>这是一封通过SMTP发送的HTML格式邮件</p>';
$mail->AltBody = '这是一封通过SMTP发送的纯文本邮件,备用内容'; // 非HTML客户端的备用内容
// 添加附件
$mail->addAttachment('/path/to/file.pdf', '附件名称.pdf');
$mail->send();
echo '邮件发送成功';
} catch (Exception $e) {
echo "邮件发送失败,错误信息: {$mail->ErrorInfo}";
}
?>
3. 方案优势
- 支持HTML格式邮件、附件发送、抄送密送等完整邮件功能。
- 可以通过主流邮箱服务商的SMTP服务发送,邮件到达率高,不易被判定为垃圾邮件。
- 兼容性好,支持各种PHP运行环境,不需要依赖服务器本地邮件服务配置。
三、两种方案的选择建议
如果是本地开发测试、发送量极小的临时场景,可以使用PHP内置的mail()函数快速验证功能。如果是生产环境、需要稳定发送、有复杂邮件需求的场景,优先选择SMTP协议配合第三方库的方式,保障邮件发送的可靠性和功能完整性。
PHPsend_emailSMTPmail_function修改时间:2026-06-23 14:15:33