2013-01-03 43 views
0

好的,我在我正在处理的网站的两个单独页面上设置了一个php邮件程序。我曾在一个网站我建立的邮件通过一切曾任职,这是直截了当如何设置电子邮件设置所有的变量之后:从邮件功能中的地址进行PHP邮件设置

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

因此,这是什么在接触结束时(处理)页面。我将$ email和$ replyemail放入$ message中,并且在发送到$ email指定的电子邮件的消息中正确显示。

我真的不明白的部分是有消息称它是来自该地址并不$ replyemail而是它说,它正在从发送:

[email protected] 

我看了几个帖子说是相似的,但他们都没有解决这个问题,我跟着this并检查,以确保服务器php.ini文件有SAFE_MODE =关闭。然后加入

'-f $replyemail' 

到邮件功能上面这样的链接告知结束,但它并没有改变任何东西。我看到了别的地方,这说明您可能需要将电子邮件地址添加到文件/ etc/mail/trusted-users,但问题是电子邮件是动态的。由于该电子邮件名称是用户输入的任何电子邮件。然后电子邮件被发送到网站管理员进行审查,并且我希望电子邮件说它来自填写表单的用户电子邮件。

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

该项目是建立在WordPress的,但我只是通过SSH丢弃到服务器上的文件,不知道如果这与它有什么关系。

感谢,

-Alan

回答

0

有许多原因可能导致这个问题,我前一阵子遇到这个问题时,我建我的网站。我解决它首先创建一个函数来处理邮寄给我:

function mailouthtml($to, $title, $body, $from){ 
    if(!isset($from)){ 
     $from = 'Default Sender<[email protected]>'; 
    } 
    $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"); 
} 

让我分解这一点。该功能要求输入地址,电子邮件标题,电子邮件正文和发件人地址。发件人地址用于将信息添加到电子邮件标题。您的电子邮件的标题信息告诉您的邮件服务器如何处理您的电子邮件,并且需要一些信息才能正确处理邮件。

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

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

我在这里创建的mailouthtml()函数手动构造头,并且“从-f $”,以增加额外的参数显式设置“From”字段。 $ from变量在函数调用中是可选的;如果它不存在,它会设置一个默认值。你可以找到的邮件功能的更多信息Here.

注意以下几点:

  • 大多数MTA的需要回复地址,返回路径和从外地,或者它可以被标记为垃圾邮件。
  • Content-Type需要告诉邮件服务器正在传递什么类型的内容,通常是text/html或text/plain。
  • 我有一个if(){}语句设置默认地址,如果没有指定。如果您不想指定名称,则可以省略“默认发件人”。你也可以把它改成任何你想要的。
  • 组织是可选的。

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

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

0

不要让这个给自己。使用phpmailerswiftmailer等一些成熟的库,它们会帮助你避免这些麻烦......我知道还有更多包含等,但没有点给这个打架。如果您仍想这样做,请尝试设置标题Returh-path