0

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

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

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

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

rtl.srv@gmail.com

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

'-f $replyemail'

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

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

该项目是在 wordpress 中构建的,但我只是通过 SSH 将文件放到服务器上,不确定这是否与它有关。

谢谢,

-艾伦

4

2 回答 2

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");
}

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

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

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

我在这里创建的 mailouthtml() 函数手动构造了标头,并添加了附加参数“-f $from”以明确设置“From”字段。$from 变量在函数调用中是可选的;如果它不存在,它会设置一个默认值。您可以在此处找到有关邮件功能的更多信息。

请注意以下事项:

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

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

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

于 2013-01-03T01:48:14.627 回答
0

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

于 2013-01-03T01:57:00.717 回答