PHP邮件设置从邮件功能的地址

时间:2013-01-03 00:45:06

标签: php apache

好的,所以我在我正在处理的网站上的2个单独页面上设置了一个php邮件程序。我以前在我建立的网站上处理过邮件中的所有内容,并且在设置所有变量后如何设置电子邮件是直截了当的:

mail("$email",
     "Receipt: $thesubject",
     "$message",
     "From: $replyemail\nReply-To: $replyemail");

所以这就是联系(处理)页面结尾处的内容。我将$ email和$ replyemail放入$ message中,并且它们会在发送到$ email指定的电子邮件的消息中正确显示。

我不太了解的部分是消息说它来自的地址不是$ replyemail,而是说它是从以下地址发送的:

rtl.srv@gmail.com

我看到一些相似的帖子,但没有一个帖子解决了这个问题,我跟着this并检查确保服务器php.ini文件有SAFE_MODE = off。然后添加

'-f $replyemail'

到上面的邮件功能的结尾,就像那个链接建议但它没有改变任何东西......我在其他地方看到它说明你可能要将电子邮件地址添加到文件/ etc / mail / trusted-用户,但问题是电子邮件是动态的。由于该电子邮件名称是用户输入的任何电子邮件。然后将电子邮件发送给网站管理员进行审核,我希望该电子邮件说明是来自填写表单的用户电子邮件。

我知道变量设置正确,因为它们正在电子邮件的消息中正确打印出来。因此,如果有人知道为什么会发生这种情况或者我如何解决这个问题,我将不胜感激。

该项目是用wordpress构建的,但我只是通过SSH将文件放到服务器上,不知道是否与它有任何关系。

谢谢,

-Alan

2 个答案:

答案 0 :(得分:0)

有很多问题可能导致这种情况,我在不久前建立自己的网站时遇到过这个问题。我通过首先创建一个函数来为我处理邮件来解决它:

function mailouthtml($to, $title, $body, $from){
    if(!isset($from)){
        $from = 'Default Sender<address@example.com>';
    }
    $header .= "Reply-To: $from\r\n"; 
    $header .= "Return-Path: $from\r\n"; 
    $header .= "From: $from\r\n"; 
    $header .= "Organization: Example.com, Inc.\r\n"; 
    $header .= "Content-Type: text/html\r\n"; 
    mail($to,$title,$body,$header,"-f $from");
}

让我稍微分解一下。该函数调用To地址,电子邮件标题,电子邮件正文和发件人地址。发件人地址用于向电子邮件标头添加信息。您的电子邮件的标题信息告诉您的邮件服务器如何处理您的电子邮件,它需要一些信息才能正确处理邮件。

PHP中的mail()函数格式如下:

mail($to,$title,$body,$headers,$additional_parameters);

我在这里创建的mailouthtml()函数手动构造头,并添加附加参数“-f $ from”以显式设置“From”字段。 $ from from变量在函数调用中是可选的;如果它不存在,则设置默认值。您可以找到有关邮件功能Here.

的更多信息

请注意以下事项:

  • 大多数MTA都需要回复,回复路径和发件人字段,否则可能会被标记为垃圾邮件。
  • 需要Content-Type告诉邮件服务器提供什么类型的内容,通常是text / html或text / plain。
  • 我有一个if(){}语句,如果没有指定默认地址,则设置默认地址。如果您不想指定名称,可以省略“默认发件人”。您也可以将其更改为您想要的任何内容。
  • 组织是可选的。

我还建议您为自己的域名启用SPF,并DKIM在邮件上签名。这些都是通过您的域名的DNS条目实现的。如果你无法访问它,没什么大不了的;他们的目的是控制垃圾邮件。

此外,如果您有专用服务器和自己的IP地址,请确保设置了Reverse DNS条记录。这也有助于外国MTA将您的信息识别为真实信息。

答案 1 :(得分:0)

不要自己做这件事。使用一些成熟的库,如phpmailerswiftmailer,它们将帮助您避免这些麻烦...我知道还有更多的包括等等,但没有必要对此进行斗争。如果您仍想执行此操作,请尝试设置标题Returh-path