PHP 邮件概览

热门:
升级您的服务器配置! 申请 AVA 并使用 立减 15%
使用优惠码:

mail() 函数内置于 PHP 中,用于直接从 web server 发送邮件。它是一种发送通知、联系表单消息、订单确认和其他类型消息的简单方式。

适用于无需使用外部库的基本邮件功能。

mail() 的工作原理

当你调用 mail() 函数时,PHP 会将邮件传递给安装在服务器上的系统邮件传输代理(MTA)(通常是 Sendmail 或 Postfix)。然后,MTA 会处理并将消息投递到指定地址。

 语法

mail(to, subject, message, headers, parameters);

 参数

参数描述
$to收件人的 email 地址。你可以指定多个地址,并用逗号分隔。
$subject邮件主题。不得包含换行符。
$message消息正文。
$headers附加头信息,如 From、Reply-To、Cc、Bcc 等。
$parameters额外参数,例如为 Sendmail 指定发送者(-f)。

简单示例

<?php $to = "user@example.com"; $subject = "Test Email"; $message = "Hello! This is a test email sent using PHP."; $headers = "From: webmaster@yourdomain.com"; mail($to, $subject, $message, $headers); ?>

 重要说明

1. 必须包含 From: 头

如果你不指定 From: 头,大多数 mail server 会将该消息视为可疑邮件或 spam 而拒绝。

$headers = "From: noreply@yourdomain.com";

2. 格式化多行消息

在消息中使用 rn 分隔各行:

$message = "Hello,rnrnThank you for your order.rnrnBest regards,rnYour Team";

3. 多个头信息

使用 rn 分隔多个头信息,如 Reply-To、Cc 和 Bcc:

$headers = "From: admin@yourdomain.comrn"; $headers .= "Reply-To: support@yourdomain.comrn"; $headers .= "Cc: someone@yourdomain.comrn";

示例:发送 HTML Email(仅文本)

mail() 函数本身不支持附件。但你可以发送 HTML email,或手动设置 content type:

$headers = "MIME-Version: 1.0rn"; $headers .= "Content-type: text/html; charset=UTF-8rn"; $headers .= "From: info@yourdomain.com"; $message = "<h1>Hello!</h1><p>Your order has been received.</p>"; mail("user@example.com", "Order Confirmation", $message, $headers);

 常见问题与解决方案

问题原因 / 解决方案
Email 未送达缺少 From: 头,或 server IP 被列入黑名单
Email 完全无法发送未安装 MTA(例如需要 Sendmail/Postfix)
错误:mail() 已被禁用php.ini 中禁用了 mail()(通常由主机策略决定)
俄文文本显示为 ????headers 中未将 Charset 设置为 UTF-8
Email 进入 spamFrom 不正确、没有 SPF/DKIM,或域名配置错误

 结论

mail() 函数是一个基础但强大的工具,可直接从 PHP 脚本发送邮件。它具有以下特点:

  • 易于使用
  • 不需要额外库
  • 适用于内部通知、联系表单和自动回复

不过,请注意它的局限性:

  • 依赖服务器的 mail 配置
  • 不支持附件
  • 在某些共享 hosting 环境中可能默认被禁用

如果你计划定期发送邮件,请确保你的 server 已正确配置外发邮件(已安装 Sendmail/Postfix,已设置 SPF/DKIM 记录,并在 php.ini 中启用 mail())。