PHP mail()使用" anonymous @ ..."发送电子邮件

时间:2012-01-03 16:04:10

标签: php

我尝试过以下方面但收效甚微:

    $fromEmail = "something.com <noreply@something.com>\r\n";

    $headers = 'From: '.$fromEmail;
    $headers .= 'Reply-To: '.$fromEmail;  
    $headers .= 'Return-Path: '.$fromEmail;
    $headers  = 'MIME-Version: 1.0' . '\n';
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . '\r\n';

    if(mail($to, $subject, $message, $headers)) { echo "1"; exit; }

我尝试评论Reply-To:Return-Path:行,并将if(...行替换为:

    if(mail($to, $subject, $message, $headers,'-fnoreply@something.com')) { ...

在所有情况下,电子邮件都会到达,但来自anonymous@...

3 个答案:

答案 0 :(得分:3)

您的代码中存在语法错误。

您在MIME标题行中缺少一个点。

应该是:

$headers = 'From: '.$fromEmail;
$headers .= 'Reply-To: '.$fromEmail;  
$headers .= 'Return-Path: '.$fromEmail;
$headers .= 'MIME-Version: 1.0' . '\n';
<...>

答案 1 :(得分:2)

看起来像匿名@ ...是你的信封“来自”地址。信封“发件人”地址与电子邮件“发件人:”标题中显示的地址不同。这是sendmail在其“MAIL FROM / RCPT TO”中与接收邮件服务器交换使用的内容。它被称为“信封”地址的主要原因是出现在邮件标题和正文之外,在邮件之间的原始SMTP交换中服务器

要更改unix上的“from”地址信封,请为sendmail二进制文件指定“-f”选项。您可以通过在“sendmail_path”命令行中添加“-r”选项在php.ini中全局执行此操作。您也可以通过将-f mail@something.com作为附加参数参数传递给mail()函数(第5个参数),从PHP中以编程方式执行此操作。

在php.ini中,您可以像这样添加默认地址

sendmail_from = me@something.com

答案 2 :(得分:1)

要从更改信封邮件,您可以使用第五个参数。这用于应该直接传递给sendmail的选项。在这里,您应该添加-f info@mywebaddress.com。一个简单的例子如下所示。

mail('recipient@domain.com', 'Subject', 'Message',
  'From: info@myaddress.info','-f info@myaddress.info');

而且,the official PHP manual on mail()中提到了所有这些。