You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用mail()函数发送两封邮件仅收到第二封的问题排查

邮件发送问题排查与修复

以下是导致第一封邮件无法收到的常见原因及解决办法:

  • 邮件头换行格式错误:PHP的mail()函数要求邮件头的换行必须使用\r\n(CRLF),你代码里用的普通换行会导致邮件头解析异常,被服务器拒收。需要把第一封邮件的headers里的换行全部替换成\r\n。

  • 缺少错误检查:第一封邮件调用mail()后没有验证发送状态,无法确认是否发送成功。可以添加状态判断并记录错误日志,方便排查问题。

  • 邮件内容易被垃圾邮件拦截:第一封邮件内容只有"Test",过于简单容易触发垃圾邮件过滤器,建议添加Content-Type头声明编码和类型,同时丰富内容。

  • MessageID域名无效:第一封邮件的MessageID用了@test.com,如果该域名没有正确的MX记录,邮件服务器可能会拒绝投递,建议替换为你实际使用的域名。

  • 服务器发件人验证限制:部分服务器要求设置信封发件人,可在mail()的第五个参数添加-f$from,确保发件人通过验证。

修改后的示例代码
$to = $visitor_email;
$subject = "Get started";
$from = $your_email;

$body = "这是测试邮件,添加具体内容避免被垃圾邮件拦截";

// 修正邮件头格式,添加Content-Type
$headers = "From: $from\r\n";
$headers .= "Reply-To: $visitor_email\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "MessageID: <" . md5('HELLO'.(idate("U")-1000000000).uniqid())."@your-real-domain.com>\r\n";

// 检查第一封邮件发送状态
$firstSent = mail($to, $subject, $body, $headers, "-f$from");
if (!$firstSent) {
    error_log("第一封邮件发送失败,收件人:$to");
}

$to2 = $your_email_2;
$subject2 = "Form";
$from2 = $your_email_2;
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';

$body2 = "IP: $ip\r\n" .
         "Name: $name\r\n" .
         "Company: $company\r\n" .
         "Email: $visitor_email_2\r\n";

// 统一修正第二封邮件头格式
$headers2 = "From: $from2\r\n";
$headers2 .= "Reply-To: $visitor_email_2\r\n";
$headers2 .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers2 .= "MessageID: <" . md5('HELLO'.(idate("U")-1000000000).uniqid())."@your-real-domain.com>\r\n";

if (mail($to2, $subject2, $body2, $headers2, "-f$from2")) {
    header('Location: success.html');
} else {
    header('Location: fail.html');
}

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:51:21