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

部署在DreamHost主机的PHP contact form无法正常发送邮件问题咨询

问题修复与排查步骤

1 修复PHP代码逻辑错误

你的PHP代码存在2个直接导致发信失败的核心问题:

  • $headers中的From字段格式非法,必须为合规的邮箱格式,不能仅填写字符串。同时DreamHost限制发件人必须是当前托管站点域名下已创建生效的真实邮箱,不支持任意自定义发件人。
  • 缺少必要的邮件头字段,极易被邮件服务商判定为垃圾邮件直接拦截,不会进入收件箱。

修复后的PHP参考代码如下:

<?php
// 先增加表单参数校验,避免空内容提交触发拦截
if (isset($_POST['send']) && !empty($_POST['name']) && !empty($_POST['mail']) && filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL)) {
  $name = $_POST['name'];
  $subject = $_POST['subject'];
  $mailFrom = $_POST['mail'];
  $message = $_POST['message'];
  
  $mailTo = "你的收件邮箱@xxx.com";
  // 这里替换为你在DreamHost后台创建的、和站点同域名的发件邮箱,比如no-reply@你的域名.com
  $headers = "From: 站点联系表单 <no-reply@你的域名.com>\r\n";
  // 增加回复头,方便直接回复用户填写的邮箱
  $headers .= "Reply-To: " . $mailFrom . "\r\n";
  $headers .= "Content-Type: text/plain; charset=utf-8\r\n";
  $txt = "Commission from " . $name . ".\n\n" . $message;
  
  // 增加发信结果判断,方便排查问题
  $sendStatus = mail($mailTo, $subject, $txt, $headers);
  if(!$sendStatus) {
    // 排查阶段可以打开下面的注释看具体错误,上线后记得删除
    // print_r(error_get_last());
    // exit;
    header("Location: ../commissions.php?error=mailfail");
  } else {
    header("Location: ../commissions.php?error=mailsent");
  }
  exit;
}

2 DreamHost主机侧配置检查

  • 确认你填写的发件邮箱已在DreamHost后台邮件管理中创建完成,且和当前站点属于同一个域名
  • 不要使用第三方域名邮箱(如Gmail、QQ邮箱)作为发件人,DreamHost会直接拦截此类跨域名发信请求
  • 排查阶段先检查收件邮箱的垃圾邮件文件夹,未配置邮件头的邮件大概率会被判定为垃圾邮件
  • 确认php/contact.php文件路径正确,文件权限设置为755,DreamHost默认不允许权限过高的PHP文件执行

3 基础逻辑排查

  • 临时注释掉header跳转代码,提交表单后查看页面输出,确认代码确实执行到了发信逻辑分支
  • 可以临时打印表单提交的参数,确认所有字段都能正常获取,排除表单提交失败的问题

内容的提问来源于stack exchange,提问作者Sol Emperor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:12:01