使用PHP PHPMailer(SMTP)提交联系表单无法发邮件求排查
排查PHP联系表单邮件发送失败的问题
看起来你的联系表单提交后一直返回「There is an error」,结合你给出的代码片段,我先从几个常见的问题点帮你分析——注意你贴出的clean_text函数代码不完整,这很可能是问题源头之一,先从这里开始:
1. 补全并验证clean_text函数
你目前的函数只写了$string = ...,没有完成逻辑也没有返回值,这会导致后续处理表单数据时变量异常。一个标准的文本清理函数应该包含必要的过滤并返回处理后的内容,比如:
function clean_text($string) { $string = trim($string); // 去除首尾空格 $string = stripslashes($string); // 去除转义符 $string = htmlspecialchars($string); // 转义HTML特殊字符 return $string; // 必须返回处理后的字符串,否则变量会为空! }
2. 检查mail()函数的调用逻辑
原生mail()函数对参数要求严格,很多失败都是因为参数不规范:
- 确保表单提交判断正确:只有当表单POST提交时才处理逻辑,避免初始化阶段就触发错误:
if ($_SERVER["REQUEST_METHOD"] == "POST") { // 这里处理表单数据和邮件发送 } - 完善邮件头信息:缺少
From、Reply-To或者内容类型的邮件,很容易被服务器拒收:$headers = "From: " . $email . "\r\n"; $headers .= "Reply-To: " . $email . "\r\n"; $headers .= "Content-type: text/html; charset=UTF-8\r\n"; - 确认收件人邮箱正确:你要接收邮件的邮箱地址必须是有效的,并且服务器允许发送到该地址(部分主机限制只能发送到同域名邮箱)。
3. 排查服务器邮件配置问题
很多共享主机默认禁用了原生mail()函数,或者需要配置SMTP才能正常发送。如果上述调整后还是失败,建议改用PHPMailer这类第三方库——它支持SMTP认证,发送成功率更高,配置也更灵活。
4. 检查表单字段与PHP变量的一致性
确保HTML表单里的字段name属性和PHP中$_POST获取的键名完全匹配,比如表单里是<input name="user_name">,PHP里就不能用$_POST["name"],否则会导致变量为空,进而触发发送失败。
内容的提问来源于stack exchange,提问作者Douggy Budget
相关产品推荐
相关产品推荐

