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

PHP邮件表单部署至主机后无法发送问题求助

解决PHP联系表单无法发送邮件的问题

我帮你排查了代码里的几个关键问题,这些应该是导致邮件发不出去的核心原因:

1. 邮箱地址格式错误

你定义的收件邮箱jonomarx20@gmailcom缺少了域名里的点,正确格式应该是jonomarx20@gmail.com,这个低级错误会直接导致邮件无法投递到正确的邮箱服务器。

2. mail()函数参数顺序完全错误

PHP的mail()函数标准语法是:

mail(string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = "")

但你的代码里把收件人地址这个必填参数漏掉了,反而把主题放在了第一个位置,这是最致命的错误!正确的调用应该把收件人地址作为第一个参数传入。

3. 冗余代码与内容拼接错误

  • 你重复定义了三次$address变量,完全没必要,直接使用提前定义好的WEBMASTER_EMAIL即可
  • 你把邮件主题$e_subject错误地拼接到了邮件内容$msg里,主题应该单独作为mail()的第二个参数

修正后的完整PHP代码

<?php
define("WEBMASTER_EMAIL", 'jonomarx20@gmail.com'); // 修正邮箱格式
if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$error = false;
$fields = array('name', 'email', 'phone', 'message');

foreach ($fields as $field) {
    if (empty($_POST[$field]) || trim($_POST[$field]) == '') {
        $error = true;
    }
}

if (!$error) {
    $name = stripslashes($_POST['name']);
    $email = stripslashes($_POST['email']);
    $message = stripslashes($_POST['message']);
    $phone = stripslashes($_POST['phone']);

    $e_subject = 'You\'ve been contacted by ' . $name . '.';
    // 重新整理邮件内容结构
    $e_body = "You have been contacted by: $name" . PHP_EOL . PHP_EOL;
    $e_reply = "E-mail: $email" . PHP_EOL . PHP_EOL;
    $e_content = "Message:\r\n$message" . PHP_EOL . PHP_EOL;
    $e_phone = "Phone:\r\n$phone" . PHP_EOL . PHP_EOL;
    
    $msg = wordwrap($e_body . $e_reply . $e_content . $e_phone, 70); // 移除错误加入的主题

    $headers = "From: $email" . PHP_EOL;
    $headers .= "Reply-To: $email" . PHP_EOL;
    $headers .= "MIME-Version: 1.0" . PHP_EOL;
    $headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
    $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

    // 修正mail函数参数顺序:收件人、主题、内容、头部
    if(mail(WEBMASTER_EMAIL, $e_subject, $msg, $headers)) {
        echo 'Success';
    } else {
        echo 'ERROR!';
    }
}
?>

其他可能的排查点(如果修正后还是无法发送)

  • 检查主机服务器是否开启了mail()函数支持,部分虚拟主机默认禁用该函数,这种情况下建议使用SMTP方式发送邮件(比如用PHPMailer类)
  • 确认发件邮箱是否符合主机的SPF/DKIM配置,避免邮件被当成垃圾邮件拦截
  • 可以添加错误日志排查:在mail()调用后加上var_dump(error_get_last());查看具体错误信息

内容的提问来源于stack exchange,提问作者Michael Fuz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:38:37