PHP邮件:正确配置VPS上的电子邮件标头

时间:2014-01-22 14:07:48

标签: php email header vps

我一直在搜索像这样的论坛和其他人,试图更好地理解如何生成电子邮件 - 在这种情况下使用PHP mail()函数 - 这将在不违反公认协议的情况下发挥作用。 / p>

情况是,由于缺乏更好的信息,我的“代理机构”拥有来自不同公司的网站广告服务。我们可以致电John Doe的客户填写在线表格,然后将信息发送给公司A.公司A可以对其进行回复。

还有一个问题是我的网站托管在虚拟专用服务器上。所以我的“真实”地址可能是“代理商”< info@myagency.com>但是生成的电子邮件实际上可能来自< someaddress@myvpserver.com>

我应该补充说,有一条SPF记录。

我真的想了解如何配置电子邮件标题,以便:

  • 到达A公司的电子邮件似乎来自

John Doe john@doe.com

而不是

代理商 info@myagency.com

或更糟,

来自someaddress@myvpserver.com

  • 公司A能够轻松回复John Doe - 我不需要那份
  • 的副本
  • 如果发送给A公司的电子邮件由于某种原因无法送达,我真的想抓住任何反弹

我不知道这是否可行?如果是,那么我真的想知道如何配置标题 - To,From,Reply-To等等..谢谢!

2 个答案:

答案 0 :(得分:0)

1& 2: 添加此标题:

$headers = 'From: it@comes.fromhere' . "\r\n" .
    'Reply-To: it@comes.fromhere' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

而且3:

$mail = mail($to, $subject, $message, $headers);
if($mail)
{
    echo "Done!";
}
else
{
    echo "Problem while sending!";
}

试试吧!

答案 1 :(得分:0)

我不知道我是否被允许回答我自己的问题,但自从发布以来我已经取得了一些进展,这可能对其他人有所帮助。似乎有用 - 尽管需要更多测试 - 如下:

$to = 'info@companya.com';
$from = 'john@doe.com';
$sender = 'info@myagency.com';
$replyto = 'john@doe.com';

$subject = "message subject";
$msg = "message body";
$headers = "From: John Doe <$from>"."\r\n";
$headers = $headers."Sender: My Agency <$sender>"."\r\n";
$headers = $headers."Reply-To: John Doe <$replyto>";

mail($to, $subject, $msg, $headers, '-f'.$sender);

似乎可选的额外参数' - f'。$ sender 可确保将任何退回邮件发送到我的代理商,而不是John Doe;正是我想要的......; - )

当然,这可能不是唯一的解决方案,我仍然不确定这是否正确使用了From;和回复标题,所以任何了解这些事情的人的评论 - 我只是一个黑客 - 都会受到欢迎。

更新: 自从我发布原始问题以来,许多电子邮件提供商已经采用了新的DMARC协议(2014年初)。例如,我发现服务器上生成的一些电子邮件被退回,因为“发件人:”标题与实际来源(即我的域名)不匹配。因此,例如,如果“From:”标题指定了yahoo.com地址,并且检测到该电子邮件实际上并非来自yahoo.com服务器,那么它将被退回。这样做是为了让垃圾邮件发送者更难以欺骗电子邮件地址,但它已经产生了连锁效应。

部分解决方案是将“发件人:”标题设置为实际来源 - 我的电子邮件地址 - 并依赖“回复:”标题以确保回复确实转到了顾客而不是我们。这已经取得了一定的成功,但在撰写本文时,我们似乎得到了一些本应回复给客户但却没有回复的回复。好像有些电子邮件提供商不尊重“回复:”标题,但我现在无法确定。

我没有为试图回答我自己的问题而道歉,但我确信我不是唯一一个遇到这些问题的人,所以我希望可能出现一个明确的解决方案。然而,这是我现在能做的最好的事情,我们现在有: -

$to = 'info@companya.com';
$from = 'john@doe.com';
$sender = 'info@myagency.com';
$replyto = 'john@doe.com';

$subject = "message subject";
$msg = "message body";
$headers = "From: My Agency <$sender>"."\r\n";
$headers = $headers."Sender: My Agency <$sender>"."\r\n";
$headers = $headers."Reply-To: John Doe <$replyto>";

mail($to, $subject, $msg, $headers, '-f'.$sender);