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

PHP发送Gmail邮件异常:内容全显示在主题栏,无邮件正文

解决PHP邮件脚本内容全跑到主题栏、正文为空的问题

嘿,我完全懂你遇到的糟心情况——邮件发出去了,但所有内容都挤在主题里,正文空得离谱!这大概率是邮件头设置不对,或者参数顺序搞混了,咱们一步步来解决:

常见问题原因

  • 没有设置正确的Content-Type头:邮件客户端不知道该怎么解析你的内容,索性把所有信息都当成主题处理;
  • 参数顺序错误:mail()函数的参数搞混了,比如把正文内容传到了主题参数的位置;
  • 邮件头格式不规范:换行用了\n而不是标准的\r\n,导致服务器解析邮件结构出错。

修正后的代码示例

这里给你一个标准的可运行版本,适配你的需求:

<?php
// 检查表单核心字段是否提交
if (isset($_REQUEST['email'], $_REQUEST['name'], $_REQUEST['message'])) {
    // 基础配置
    $recipient = 'me@gmail.com'; // 你的Gmail收件地址
    $subject = '新的联系表单消息'; // 清晰的邮件主题,别把正文内容塞这!
    
    // 构建邮件正文(用HTML格式,支持<br>换行)
    $senderName = htmlspecialchars($_REQUEST['name']);
    $senderEmail = htmlspecialchars($_REQUEST['email']);
    $senderMessage = htmlspecialchars($_REQUEST['message']);
    $emailBody = "Name : {$senderName}<br>Email: {$senderEmail}<br>Message: {$senderMessage}";
    
    // 关键:设置正确的邮件头
    $headers = "From: {$senderName} <{$senderEmail}>\r\n";
    $headers .= "Reply-To: {$senderEmail}\r\n";
    // 告诉邮件客户端这是HTML格式邮件,这是解决内容乱跑的核心!
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    
    // 发送邮件
    $sendSuccess = mail($recipient, $subject, $emailBody, $headers);
    
    if ($sendSuccess) {
        echo "邮件已成功发送!";
    } else {
        echo "邮件发送失败,请检查服务器的邮件配置(比如sendmail是否正常运行)。";
    }
}
?>

核心注意事项

  • 严格区分主题和正文:$subject只放简短的标题,正文内容单独放到$emailBody里,别把两者拼接在一起;
  • 必须设置Content-Type:因为你用了<br>换行,所以要声明text/html类型,否则邮件客户端会把<br>当成普通文本,甚至解析错误;
  • 邮件头用\r\n换行:这是邮件协议的规范要求,避免部分邮件服务器或客户端解析出错;
  • 转义用户输入:用htmlspecialchars()处理用户提交的内容,防止XSS攻击和邮件内容乱码。

如果手动处理邮件头还是容易出错,推荐使用PHPMailer这类成熟的邮件库,它会帮你自动处理所有头信息和格式问题,比原生mail()函数靠谱得多哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:26