我知道这似乎是重复但请先阅读:
我有以下php代码:
<?php
$to = 'myemail@yahoo.com';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$headers = "From: ".$email." \r\n";
$headers .= "Reply-To: ".$email."\r\n";
mail($to, $subject, $message, $headers);
?>
我认为它是标准的电子邮件发送脚本。但是,我面临一个有趣的错误。我的网站是florin-pop.com,电子邮件只发送到电子邮件输入字段时我输入的内容如下: blahblah@florin-pop.com 或 mama @ florin-pop。 com 或 @ florin-pop.com 之前的任何内容。
如果我尝试添加不同的内容,例如 test@yahoo.com ,甚至是真正的雅虎电子邮件地址,我都不会收到该电子邮件。为什么?我的代码出了什么问题?它可能来自托管公司? (我使用hostgator)。
编辑:
如果我将回复更改为域名电子邮件地址,那么它正在运行,但它仍然不是完美的方式。如果您按下回复按钮并忘记了这个技巧,您将通过电子邮件发送给自己。
代码:
<?php
$to = 'myemail@yahoo.com';
$my_domain_email = 'myemail@mydomain.com';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$headers = "From: ".$email." \r\n";
$headers .= "Reply-To: ".$my_domain_email."\r\n";
mail($to, $subject, $message, $headers);
?>
答案 0 :(得分:1)
在这种情况下,雅虎采用Domain-based Message Authentication, Reporting, and Conformance (DMARC) policy可能会导致传递失败。
Twitter,Facebook,Linked In,Paypal,AOL,康卡斯特等人也采用了这一政策。 [Venture Beat]这意味着所有符合DMARC标准的邮件接收者(包括Yahoo, Hotmail和Gmail)现在正在弹出以“@ yahoo.com”发送的电子邮件 不通过Yahoo服务器发送的地址。 [Yahoo]
解决方案:将“发件人”标题更改为发送电子邮件的服务器上的地址。这(正确)表示邮件是从您的服务器发送的,而不是从Yahoo发送的。您仍然可以在“回复”标题中使用用户提交的地址,以便收件人可以回复发件人。
作为最佳做法,您应该...使用您控制的域名...“发件人:”标题 ... [例如,]显示网站访问者的姓名在“发件人:”标题的描述部分,“回复:”标题设置为网站访问者的地址,但“发件人:”标题中使用的实际地址清楚地表明您的网站是消息。 [DMARC]