新手求助:网站联系表单无法发送邮件问题排查
修复PHP联系表单无法发送邮件的问题
一、HTML表单核心错误修复
你的表单控件缺少**name属性**(PHP通过name而非id获取提交值),且输入框type设置错误,以下是修正后的代码:
<div class="col-md-6"> <form id="fcf-form-id" class="fcf-form-class" method="post" action="php/form-control.php"> <div class="row"> <div class="form-group col-md-6"> <label for="Name">Twoje imię</label> <input type="text" class="form-control" id="Name" name="Name"> </div> <div class="form-group col-md-6"> <label for="Email">Twój email</label> <input type="email" class="form-control" id="Email" name="Email"> </div> <div class="form-group col-md-12"> <label for="Phone">Twój telefon</label> <input type="tel" class="form-control" id="Phone" name="Phone"> </div> </div> <div class="form-group"> <label for="Message">Wiadomość</label> <textarea class="form-control" id="Message" name="Message" rows="3"></textarea> </div> <button type="submit" class="btn font-weight-bold atlas-cta atlas-cta-wide cta-green my-3">Wyślij</button> </form> </div>
修正点:
- 给所有输入/文本框添加
name属性,和PHP中$_POST的键对应 - 修正姓名输入的
type为text,电话输入的type为tel,邮箱输入的label与逻辑匹配
二、PHP代码错误修复
你的代码存在邮箱验证正则错误、错误屏蔽、邮件头格式问题,以下是修正后的代码:
<?php if (isset($_POST['Email'])) { $email_to = "你的邮箱地址@gmail.com"; // 替换为实际接收邮箱 $email_subject = "Automedyk - Wiadomość z formularza"; function problem($error) { echo "Przykro nam ale wystąpił błąd. "; echo "<br><br>"; echo $error . "<br><br>"; echo "Prosimy o powrót i poprawę błędów.<br><br>"; die(); } // 验证必填字段是否存在 if ( !isset($_POST['Name']) || !isset($_POST['Email']) || !isset($_POST['Message']) ) { problem('Przykro nam ale wystąpił błąd.'); } $name = trim($_POST['Name']); $email = trim($_POST['Email']); $message = trim($_POST['Message']); $phone = isset($_POST['Phone']) ? trim($_POST['Phone']) : ''; $error_message = ""; // 正确的邮箱格式验证正则 $email_exp = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/"; if (!preg_match($email_exp, $email)) { $error_message .= 'Nieprawidłowy adres email.<br>'; } $string_exp = "/^[A-Za-z .'-]+$/"; if (!preg_match($string_exp, $name)) { $error_message .= 'Nieprawidłowe imię.<br>'; } if (strlen($message) < 2) { $error_message .= 'Nieprawidłowa treść wiadomości.<br>'; } if (strlen($error_message) > 0) { problem($error_message); } $email_message = "Form details below.\n\n"; function clean_string($string) { $bad = array("content-type", "bcc:", "to:", "cc:", "href"); return str_replace($bad, "", $string); } $email_message .= "Name: " . clean_string($name) . "\n"; $email_message .= "Email: " . clean_string($email) . "\n"; if (!empty($phone)) { $email_message .= "Phone: " . clean_string($phone) . "\n"; } $email_message .= "Message: " . clean_string($message) . "\n"; // 使用标准\r\n作为邮件头换行符 $headers = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $email . "\r\n" . 'X-Mailer: PHP/' . phpversion(); // 移除@符号,显示发送错误详情 $mail_sent = mail($email_to, $email_subject, $email_message, $headers); if (!$mail_sent) { problem('Wystąpił błąd podczas wysyłania wiadomości. Błąd: ' . error_get_last()['message']); } ?> Dziękujemy za wiadomość, skontaktujemy się niebawem! <?php } else { // 防止直接访问PHP文件 echo "Prosimy użyć formularza kontaktowego."; } ?>
修正点:
- 替换了无效的邮箱验证正则,匹配标准邮箱格式
- 移除
@mail()中的@,显示发送错误信息便于调试 - 修正邮件头换行符为
\r\n,兼容不同服务器 - 添加电话字段的处理逻辑(可选)
三、服务器环境注意事项
- 本地开发环境(XAMPP/WAMP等):
默认无邮件服务器配置,mail()函数无法工作。推荐使用PHPMailer库通过SMTP发送(如Gmail、Outlook的SMTP服务)。 - 线上服务器:
部分主机商会限制mail()函数,或要求发件人地址与服务器域名匹配。若仍无法发送,优先使用PHPMailer/SwiftMailer这类专业邮件库,它们更稳定且支持SMTP,避免服务器配置问题。
内容的提问来源于stack exchange,提问作者n0izeone
相关产品推荐
相关产品推荐

