PHP联系表单无法传递POST数据,仅收邮件标题求助
问题描述
提交联系表单后,能收到发送至supporto@mx-strength.it的邮件,但仅显示邮件标题,无法获取通过$_POST获取的用户姓名、邮箱、消息等信息。以下是对应的HTML表单代码、PHP处理代码及收件箱截图,请求协助解决。
HTML代码
<div class="card card-style contact-form"> <div class="content"> <form action="/php/contact.php" method="post" class="contactForm" id="contactForm"> <fieldset> <div class="form-field form-name"> <label class="contactNameField color-theme" for="contactNameField">Nome e Cognome*:<span>(*Campo obbligatorio)</span></label> <input type="text" name="contactNameField" value="" class="round-small" id="contactNameField" /> </div> <div class="form-field form-email"> <label class="contactEmailField color-theme" for="contactEmailField">Email*:<span>(*Campo obbligatorio)</span></label> <input type="text" name="contactEmailField" value="" class="round-small" id="contactEmailField" /> </div> <div class="form-field form-text"> <label class="contactMessageTextarea color-theme" for="contactMessageTextarea">Messaggio*: (Inserisci anche un tuo recapito telefonico oppure il tuo @ Telegram se preferisci essere ricontattato in questo modo)<span>(*Campo obbligatorio)</span></label> <textarea name="contactMessageTextarea" class="round-small" id="contactMessageTextarea"></textarea> </div> <div class="form-button"> <input type="submit" class="btn bg-highlight text-uppercase font-900 btn-m btn-full rounded-sm shadow-xl contactSubmitButton" value="INVIA MESSAGGIO" data-formId="contactForm" /> </div> </fieldset> </form> </div> </div>
PHP代码
<?php // variables start $name = ""; $email = ""; $message = ""; $name = trim($_POST['contactNameField']); $email = trim($_POST['contactEmailField']); $message= trim($_POST['contactMessageTextarea']); // variables end // email address starts $emailAddress = 'supporto@mx-strength.it'; // email address ends $subject = "MX-STRENGTH FORM: $name"; $message = "<strong>Inviato da:</strong> $name <br/><br/> <strong>Messaggio:</strong> $message"; $headers .= 'From: '. $name . '<' . $email . '>' . " "; $headers .= 'Reply-To: ' . $email . " "; $headers .= 'MIME-Version: 1.0' . " "; $headers .= 'Content-type: text/html; charset=iso-8859-1' . " "; //send email function starts mail($emailAddress, $subject, $message, $headers, $name); //send email function ends ?>
收件箱情况
能收到邮件,但看不到用户提交的数据,截图如下:
解决方案
你的代码存在几个关键问题,导致无法正确获取并显示用户提交的数据:
$headers未初始化
直接使用$headers .= ...拼接,但$headers未初始化为空字符串,会导致头部信息出现错误,邮件解析异常。
修复:在使用前初始化$headers:$headers = '';换行符不符合标准
PHP的mail()函数要求邮件头部换行符使用\r\n(RFC标准),你当前用的单个\n会导致部分邮件服务器解析失败。
修复:将所有头部的换行替换为\r\n:$headers .= 'From: '. $name . '<' . $email . '>' . "\r\n"; $headers .= 'Reply-To: ' . $email . "\r\n"; $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";mail()函数额外参数错误mail()第五个参数是命令行额外参数,你传入$name会导致发送命令出错,干扰邮件内容传输。
修复:移除多余参数,正确调用:mail($emailAddress, $subject, $message, $headers);字符集建议更新
iso-8859-1是旧字符集,建议改为UTF-8以支持更多语言:$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";添加基础校验
建议增加请求方式和必填字段校验,避免空提交:if ($_SERVER['REQUEST_METHOD'] !== 'POST') { die('仅允许POST请求'); } if (!isset($_POST['contactNameField'], $_POST['contactEmailField'], $_POST['contactMessageTextarea'])) { die('缺少必填字段'); }
修复后的完整PHP代码:
<?php if ($_SERVER['REQUEST_METHOD'] !== 'POST') { die('仅允许POST请求'); } if (!isset($_POST['contactNameField'], $_POST['contactEmailField'], $_POST['contactMessageTextarea'])) { die('缺少必填字段'); } $name = trim($_POST['contactNameField']); $email = trim($_POST['contactEmailField']); $user_message = trim($_POST['contactMessageTextarea']); $emailAddress = 'supporto@mx-strength.it'; $subject = "MX-STRENGTH FORM: $name"; $message_content = "<strong>发送人:</strong> $name <br/><br/> <strong>邮箱:</strong> $email <br/><br/> <strong>消息:</strong> $user_message"; $headers = ''; $headers .= 'From: '. $name . '<' . $email . '>' . "\r\n"; $headers .= 'Reply-To: ' . $email . "\r\n"; $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; mail($emailAddress, $subject, $message_content, $headers); ?>
内容的提问来源于stack exchange,提问作者Oscar Battisti
相关产品推荐
相关产品推荐

