31

我在将邮件发送到我的收件箱(gmail 帐户)时遇到问题,但每次都进入垃圾邮件文件夹。

这是代码片段

     //$ticketDetail is array which contain required information to send.
       sendOwnershipEmail('dineshnagarscriet@gmail.com', $ticketDetail);
    
       function sendOwnershipEmail($email, $ticketDetail) {
            $param = new stdClass();
   

$param->content = "<div>
    <div><b>".$ticketDetail[0]['ticket_number']."</b></div><br/>
    <div><img src='".$ticketDetail[0]['image_path']."'/></div><br/>
    <div>Ticket with ticket number ".$ticketDetail[0]['ticket_number']." has been requested for tranfer from <div/>
    <div>".$ticketDetail[0]['oldDepartment']." to ".$ticketDetail[0]['newDepartment']." Department <div/>
  </div>";
            
            $param->sendTo = $email;
            $param->subject = "Request for Department transfer";
            
        sendMailFunction($param);
    }
    
    
    function sendMailFunction($param) {
            $to = $param->sendTo;
            $subject = $param->subject;
            $headers = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: successive.testing@gmail.com' . "\r\n";
            $message = "<html><head>" .
                   "<meta http-equiv='Content-Language' content='en-us'>" .
                   "<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>" .
                   "</head><body>" .$param->content.        
                   "<br><br></body></html>";
          mail($to, $subject, $message, $headers);
    }

我已经尝试了很多,比如将标题设置为回复、返回路径等,但每次都是垃圾邮件。

你能弄清楚是什么问题吗?

4

6 回答 6

34

问题很简单,PHP-Mail 函数没有使用配置良好的 SMTP 服务器。

如今,电子邮件客户端和服务器对电子邮件发送服务器执行大量检查,例如反向 DNS 查找、灰名单和什么。所有这些测试都将因 php mail() 函数而失败。如果您使用的是动态IP,那就更糟了。

使用 PHPMailer-Class 并将其配置为使用 smtp-auth 以及配置良好的专用 SMTP 服务器(本地服务器或远程服务器),您的问题就消失了。

https://github.com/PHPMailer/PHPMailer

于 2013-08-14T10:34:37.363 回答
17

尝试将标题更改为:

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: successive.testing@gmail.com" . "\r\n" .
"Reply-To: successive.testing@gmail.com" . "\r\n" .
"X-Mailer: PHP/" . phpversion();

出于几个原因。

  • 其中之一是需要一个Reply-To和,

  • 使用撇号代替双引号。根据我对表单的经验,这两件事通常是触发消息最终进入垃圾邮件箱的原因。

您也可以尝试将其更改$from为:

$from = "successive.testing@gmail.com";


编辑:

请参阅我在该主题上找到的这些链接https://stackoverflow.com/a/9988544/1415724https://stackoverflow.com/a/16717647/1415724https://stackoverflow.com/a/9899837/1415724

https://stackoverflow.com/a/5944155/1415724https://stackoverflow.com/a/6532320/1415724

  • 尝试使用 ISP 的 SMTP 服务器。

    使用这个显然适用于许多人:X-MSMail-Priority: High

http://www.webhostingtalk.com/showthread.php?t=931932

“我的主机帮助我在我的域上启用了 DomainKeys 和 SPF 记录,现在当我向我的 Hotmail 地址发送测试邮件时,它不会以垃圾邮件告终。实际上,在电子邮件身份验证下的 cPanel 中启用这些设置非常容易。我不敢相信我以前从未见过。顺便说一句,它只适用于使用 phpmailer 通过 SMTP 发送。任何其他方式它仍然被标记为垃圾邮件。

PHPmailer 将邮件发送到 hotmail 中的垃圾邮件。如何修复 http://pastebin.com/QdQUrfax

于 2013-08-14T10:39:49.603 回答
5

如果您通过自己的邮件服务器发送此邮件,您可能需要添加一个“发件人”标头,该标头将包含您自己域的电子邮件地址。Gmail 可能会发送垃圾邮件,因为 FROM 地址是 gmail 地址,但不是从他们自己的服务器发送的。

于 2013-08-14T10:33:27.420 回答
2

我们通常使用电子邮件做的,防止垃圾邮件文件夹作为最终目的地,是使用 Gmail 作为 smtp 服务器或Mandrill作为 smtp 服务器。

于 2013-08-14T10:36:35.297 回答
0

我观察到的一件事可能是您提供的电子邮件地址不是域中的有效电子邮件地址。像没有人@gmail.com。该电子邮件应该存在于 Google Domain 中。在自己弄清楚之前我遇到了很多问题......希望它有所帮助。

于 2018-07-09T16:44:17.567 回答
-1

小心你的测试。如果您在表格中输入与必须接收的电子邮件地址相同的电子邮件,则将直接在垃圾邮件中:)

于 2020-01-22T18:06:18.573 回答