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

PHP邮件发送代码异常:变量无法取值与发件人设置失效

解决PHP邮件发送的两个问题:变量无法获取和发件人设置不生效

问题1:$message无法获取表单提交的$name、$phone、$email变量

仔细看你的HTML表单代码,发现邮箱和电话的input标签缺少name属性!表单只有带name属性的字段才会被提交到$_POST数组中,这就是变量为空的核心原因:

  • 邮箱输入框:只有id="email",没有name="email"
  • 电话输入框:只有id="phone",没有name="phone"

问题2:$from发件人设置不生效

原生mail()函数的headers格式需要更规范,而且很多服务器会对发件人地址做验证,甚至强制替换未授权的发件人。主要问题包括:

  • Headers缺少必要的换行分隔符(\r\n)
  • 仅设置From头不够,建议补充Reply-To(和发件人邮箱一致),方便回复
  • 部分服务器要求发件人邮箱是服务器托管的域名邮箱,否则会被替换成默认发件人

修改后的完整代码

HTML表单部分(补全name属性)

<div class="right-wrapper">
  <div class="contact-form">
    <p class="contact-form-info">Leave your contact info below, and we'll contact you shortly:</p>
    <form action="https://www.forevrmarketing.com/webdesigndemo/eddy1155/functions/send-mail.php" method="post">
      <input type="text" placeholder="Name" class="name" name="name" id="name">
      <!-- 补全name="email" -->
      <input type="email" placeholder="Email" class="email" id="email" name="email">
      <!-- 补全name="phone" -->
      <input type="number" placeholder="Phone" id="phone" class="phone" oninput="this.value=this.value.replace(/[^\d]/,'')" maxlength="15" name="phone">
      <input class="submit" type="submit" name="submit" value="Submit">
      <div class="loader" disabled><i class="fa fa-spin fa-spinner" aria-hidden="true"></i></div>
      <p class="form-details form-era">Call us at <strong style="font-weight: 600">+65 9691 1155</strong> Or <br><span class="wts"><img src="img/icon.png" alt="WhatsApp Icon"></span> <strong style="font-weight: 600">Whatsapp</strong> us</p>
      <p class="reponse"></p>
    </form>
  </div>
</div>

PHP处理部分(修正headers格式)

<?php 
if(isset($_POST['submit'])){ 
    $to = "emailgoeshere@example.com"; 
    // 先做基础的变量校验,避免空值
    $name = isset($_POST['name']) ? trim($_POST['name']) : 'Unknown Name';
    $phone = isset($_POST['phone']) ? trim($_POST['phone']) : 'Unknown Phone';
    $email = isset($_POST['email']) ? trim($_POST['email']) : 'unknown@example.com';
    $from = $email;
    $subject = "Form submission"; 
    
    // 优化message格式,更清晰
    $message = "Name: $name\n";
    $message .= "Phone: $phone\n";
    $message .= "Email: $email\n";
    $message .= "\nThis is a form submission from your website.";

    // 规范headers格式,添加必要的头信息
    $headers = "From: $name <$from>\r\n";
    $headers .= "Reply-To: $from\r\n";
    $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";

    // 执行邮件发送,并添加错误检查
    if(mail($to, $subject, $message, $headers)){
        echo "We have Recieved your Enquiry, We will get back to you soon. We Appreciate Your Patient Thank You.";
    } else {
        echo "Oops, something went wrong. Please try again later.";
    }
} 
?>

额外建议

如果修改后发件人还是不生效,大概率是服务器的邮件配置限制:

  1. 很多共享主机不允许自定义发件人,必须使用主机提供的域名邮箱作为发件人
  2. 推荐使用PHPMailer或SwiftMailer这类专业邮件库,它们更稳定,支持SMTP验证,能绕过很多服务器限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:18:49