PHP邮件发送脚本发件人显示服务器地址的修复方法求助
修复PHP邮件表单发件人显示服务器地址的问题
问题出在邮件头设置不规范,以及原生mail()函数的服务器默认行为,以下是具体修复方案:
核心原因
- 你使用了非标准邮件头字段
Od:,邮件服务器无法识别该字段,会自动 fallback 到服务器默认邮箱作为发件人。 - 直接将客户提交的邮箱设为
From,多数服务器会因SPF验证失败,强制替换发件人为服务器地址。
修复步骤
1. 使用标准邮件头字段
邮件头字段遵循英文标准,必须用From:而非Od:,同时采用名称 <邮箱地址>的格式,确保服务器能正确识别发件人。
2. 分离发件人与回复地址
发给你自己的邮件,将发件人设为你的官方邮箱(biuro@tlumaczgdanski.pl),同时添加Reply-To:字段指向客户邮箱——既保证发件人显示正确,回复时也能直接回到客户那里。
修改后的完整代码片段
<?php if(isset($_POST['submit'])) { $mailto = "biuro@tlumaczgdanski.pl"; // 你的邮箱地址 // 获取客户信息 $fromEmail = $_POST['email']; // 客户邮箱 $phone = $_POST['tel']; // 客户电话 $subject = $_POST['subject']; // 客户提交的主题 $subject2 = "Tłumacz Gdański - Potwierdzenia otrzymania wiadomości"; // 客户确认邮件主题 // 发给你的邮件内容 $message = "Wiadomość ze strony www" . "\n\n" . "Wiadomość Klienta: " . "\n" . $_POST['message'] . "\n\n" . "Telefon: " . $phone . "\n" . "Email: " . $fromEmail; // 发给客户的确认邮件内容 $message2 = "Dziękujemy za nadesłaną wiadomość!" . "\n" . "Odpowiemy najszybiej jak to tylko możliwe" . "\n\n" . "Nadesłana wiadomość: " . "\n" . $_POST['message'] . "\n\n" . "Pozdrawiamy," . "\n" . " Tłumacz Gdański!" . "\n\n" . " biuro@tlumaczgdanski.pl"; // 修正后的邮件头 // 发给你的邮件:发件人为你的邮箱,回复地址为客户邮箱 $headers = "From: Tłumacz Gdański <biuro@tlumaczgdanski.pl>\r\n" . "Reply-To: " . $fromEmail . "\r\n" . "Content-Type: text/plain; charset=utf-8\r\n"; // 发给客户的邮件:发件人为你的邮箱 $headers2 = "From: Tłumacz Gdański <biuro@tlumaczgdanski.pl>\r\n" . "Content-Type: text/plain; charset=utf-8\r\n"; // 发送邮件 $result1 = mail($mailto, $subject, $message, $headers); $result2 = mail($fromEmail, $subject2, $message2, $headers2); // 验证发送结果 if ($result1 && $result2) { $success = "Your Message was sent Successfully!"; } else { $failed = "We are sorry. Message couldn't be delivered"; } } ?>
额外注意事项
- 确保
biuro@tlumaczgdanski.pl是服务器上已创建的有效邮箱,部分虚拟主机要求发件邮箱必须存在于服务器上,否则仍会被替换。 - 如果仍有问题,建议使用PHPMailer或SwiftMailer这类专业邮件库,它们能更好地处理邮件头、SMTP验证,避免服务器默认行为干扰。
内容的提问来源于stack exchange,提问作者Tomek Prabucki
相关产品推荐
相关产品推荐

