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

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
?>

收件箱情况

能收到邮件,但看不到用户提交的数据,截图如下:
收件箱截图


解决方案

你的代码存在几个关键问题,导致无法正确获取并显示用户提交的数据:

  1. $headers未初始化
    直接使用$headers .= ...拼接,但$headers未初始化为空字符串,会导致头部信息出现错误,邮件解析异常。
    修复:在使用前初始化$headers:

    $headers = '';
    
  2. 换行符不符合标准
    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";
    
  3. mail()函数额外参数错误
    mail()第五个参数是命令行额外参数,你传入$name会导致发送命令出错,干扰邮件内容传输。
    修复:移除多余参数,正确调用:

    mail($emailAddress, $subject, $message, $headers);
    
  4. 字符集建议更新
    iso-8859-1是旧字符集,建议改为UTF-8以支持更多语言:

    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    
  5. 添加基础校验
    建议增加请求方式和必填字段校验,避免空提交:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:57