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."; } } ?>
额外建议
如果修改后发件人还是不生效,大概率是服务器的邮件配置限制:
- 很多共享主机不允许自定义发件人,必须使用主机提供的域名邮箱作为发件人
- 推荐使用PHPMailer或SwiftMailer这类专业邮件库,它们更稳定,支持SMTP验证,能绕过很多服务器限制
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

