PHP邮件发送问题求助:仅收到标签标题无用户填写内容
解决PHP邮件仅显示标签无用户内容的问题
我帮你排查了代码里的问题,主要有几个关键点导致邮件只显示标签(比如Name:)却没有用户填写的内容:
1. 错误抑制符@隐藏了变量获取失败的问题
你的PHP代码里用了@来抑制错误(比如@trim(stripslashes($_POST['name']))),这会导致当$_POST里没有对应字段时,系统不会抛出错误提示,直接返回空值,最终邮件里就只有标签没有内容。
2. 表单部分输入框缺少name属性(虽不是当前核心问题,但会影响后续扩展)
你的HTML表单里,Phone和Company Name这两个输入框没有设置name属性,就算用户填写了内容,PHP也无法通过$_POST获取到它们的值。
修复后的完整代码:
修正后的HTML代码
<section id="contact-page"> <div class="container"> <div class="center"> <h2>Drop Your Message</h2> </div> <div class="row contact-wrap"> <div class="status alert alert-success" style="display: none"></div> <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php"> <div class="col-sm-5 col-sm-offset-1"> <div class="form-group"> <label>Name *</label> <input type="text" name="name" class="form-control" required="required"> </div> <div class="form-group"> <label>Email *</label> <input type="email" name="email" class="form-control" required="required"> </div> <div class="form-group"> <label>Phone</label> <!-- 新增name属性 --> <input type="number" name="phone" class="form-control"> </div> <div class="form-group"> <label>Company Name</label> <!-- 新增name属性 --> <input type="text" name="company" class="form-control"> </div> </div> <div class="col-sm-5"> <div class="form-group"> <label>Subject *</label> <input type="text" name="subject" class="form-control" required="required"> </div> <div class="form-group"> <label>Message *</label> <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea> </div> <div class="form-group"> <!-- 修正class拼写错误:btnbtn-primary → btn btn-primary --> <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button> </div> </div> </form> </div> </div> </section>
修正后的PHP代码
<?php header('Content-type: application/json'); // 移除错误抑制符,添加字段存在性检查 $name = isset($_POST['name']) ? trim(stripslashes($_POST['name'])) : ''; $email = isset($_POST['email']) ? trim(stripslashes($_POST['email'])) : ''; $subject = isset($_POST['subject']) ? trim(stripslashes($_POST['subject'])) : ''; $message = isset($_POST['message']) ? trim(stripslashes($_POST['message'])) : ''; // 新增获取Phone和Company Name的值 $phone = isset($_POST['phone']) ? trim(stripslashes($_POST['phone'])) : ''; $company = isset($_POST['company']) ? trim(stripslashes($_POST['company'])) : ''; $email_from = $email; $email_to = 'myemail@email.com'; // 把新增的字段也加入邮件内容里(可选,根据你的需求调整) $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Phone: ' . $phone . "\n\n" . 'Company Name: ' . $company . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message; // 移除@,这样如果邮件发送失败能看到错误信息 $success = mail($email_to, $subject, $body, 'From: <'.$email_from.'>'); // 根据发送状态返回对应信息 if ($success) { $status = array( 'type'=>'success', 'message'=>'Thank you for contact us. As early as possible we will contact you ' ); } else { $status = array( 'type'=>'error', 'message'=>'Sorry, there was an error sending your message. Please try again later.' ); } echo json_encode($status); die; ?>
关键修复说明:
- 去掉了PHP里的
@错误抑制符,改用isset()检查字段是否存在,这样能避免因字段未正确传递导致的空值问题,同时方便排查错误。 - 给HTML里的Phone和Company Name输入框添加了
name属性,确保这些字段的值能被PHP获取到。 - 修正了提交按钮的class拼写错误(
btnbtn-primary改成btn btn-primary),确保按钮样式正常显示。 - 新增了邮件发送状态的判断,失败时返回错误提示,方便用户知道问题。
内容的提问来源于stack exchange,提问作者Kareem
相关产品推荐
相关产品推荐

