2009-04-14 139 views
13

我编写了一个PHP脚本来发送邮件。防止使用php邮件功能将垃圾邮件视为垃圾邮件

我的脚本是这样的:

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'From: [email protected]' . "\r\n"; 

// Email Variables 
$toUser = "[email protected]"; // recipient 
$subject = "testing"; // subject 
$body = "<html><body><p> 
      Example of including an image via html \<img\> tag: 
      <br> 
      <img src='../images/profile.jpg'> 
      <br> 
      My new picture 
      <br></p></body></html>"; // content 

if (mail($toUser,$subject,$body,$headers)) { 
    echo "sent"; 
} else { 
    echo "failed"; 
} 

嗯,当然,我用一个有效的电子邮件地址,发送者和接收者。我确实收到了电子邮件,但它发送到垃圾邮件。所以我去了谷歌的研究。是否因为我的“标题”脚本问题?如果不是,那么可能会导致我的脚本发送垃圾邮件?任何解决方案

回答

8

也许问题是,雅虎使用domainkeys验证,鉴于邮件实际上不是来自雅虎的服务器,这可能会导致您的应用程序失败。

7

当我曾经有过类似的问题时,我查看了标题,发现我的主机使用了SpamAssassin。所以我搜索了'SpamAssassin评分',并发现了大量关于如何错误地(并正确地)组成电子邮件的信息。

例如:SpamAssassin score list

0

的问题是,你从发送邮件的服务器是不是雅虎的服务器。大多数垃圾邮件过滤器会检查它们是否匹配,否则它会(并且可能 - 或可能)轻易伪造发件人。曾经想知道为什么你从bill.gates AT microsoft.com或你自己的邮件地址收到垃圾邮件?

1

正如schnalle所说,一个问题当然是您用来发送电子邮件的smtp服务器和您指定为from的那个smtp服务器是不同的.. from域与您运行的服务器相同。

所以,你可以使用雅虎服务器发送邮件(检查他们是否允许smtp远程连接,但我想他们这样做)通过smtp连接,这将解决1个问题。

另一个是没有替代纯文本内容的html内容,但是,这个并不重要。

我建议你phpMailer,免费和开源的PHP类来发送电子邮件,伊斯利使用(我用它的事件o通过Gmail的服务器发送邮件)

5

1.检查邮件内容

正如其他人暗示它可能标记为垃圾邮件,因为您的邮件看起来像垃圾邮件。

我不确定您发布的脚本是否是您正在测试的脚本。

如果它具有实际的邮件正文&标题,则通过SpamAssassin的标准安装运行此邮件会使其垃圾邮件分数为4。9

 
X-Spam-Status: No, score=4.9 required=5.0 tests=BAYES_50,HTML_IMAGE_ONLY_04, 
     HTML_MESSAGE,MIME_HTML_ONLY,NO_DNS_FOR_FROM,NO_RELAYS autolearn=no 
     version=3.2.5 

由于电子邮件正文只有HTML,因此大多数反垃圾邮件解决方案都有被怀疑处理的可能性较大。

2.邮件服务器的IP

另一个方面值得检查将是你的邮件服务器的IP地址。任何源自动态IP地址的邮件都可能被视为垃圾邮件。

3块列表

同时检查您的IP地址在阻止列表中的一个上市。首先请用http://www.spamhaus.org/lookup.lasso检查您的IP地址。

1
  1. 在您的服务器上尝试对您的SPF(Sender Policy Framework,Google for SPF记录)进行排序。
  2. 确保您从您服务器/域上的现有帐户发送电子邮件。
  3. 确保您的标题中有回复地址。

这些是你可以尝试的基本的东西。

0

你可以试试,我已经在这里创建的邮件类和测试文件。我已经测试过这些文件,并可以使用不同的邮件名称将电子邮件发送到我的Hotmail和Gmail。电子邮件被标记为垃圾的主要原因是结构(标题和消息)未正确完成。在大多数情况下,这是导致问题的换行符。

我可以使用它将附件发送到Gmail。但是,附件不适用于Hotmail。希望这有助于=)

您可以查看文件here ..

11

请试试这个:

$headers ="From:<$from>\n"; 
$headers.="MIME-Version: 1.0\n"; 
$headers.="Content-type: text/html; charset=iso 8859-1"; 

mail($to,$subject,$body,$headers,"-f$from"); 
+1

你是明星@Anju – Coder 2016-05-25 12:20:01

2

我有同样的问题:

的问题是,当您指定内容类型在“发件人:”部分之前,邮件就像垃圾邮件一样。

但是,如果您在内容部分之前指定“From:”,它会作为普通邮件来使用,并使您感到微笑和好奇。

1

删除Content-type: text/html并添加$headers .= "X-Priority: 2\nX-MSmail-Priority: high";以摆脱垃圾邮件。这种方法已经过尝试和测试。

3

使用mxtoolbox.com检查服务器IP是否被列入黑名单。这个网站也可以帮助你几个电子邮件相关的检查。

当然,在垃圾邮件过滤器内部运行的检查列表很长。如前所述,请检查电子邮件标题以了解有关垃圾邮件垃圾邮件过滤器评级的详细信息。

希望有帮助!

2
    **This Works Perfectly fine for me**  
         $to="[email protected]"; 
         $subject="This is Your Message"; 
         $from = 'Sender <[email protected]>'; 
         $body='Hi '.$name.', <br/><br>Now You can See Yor main in inbox'; 
         $headers = "From: " .($from) . "\r\n"; 
         $headers .= "Reply-To: ".($from) . "\r\n"; 
         $headers .= "Return-Path: ".($from) . "\r\n";; 
         $headers .= "MIME-Version: 1.0\r\n"; 
         $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
         $headers .= "X-Priority: 3\r\n"; 
         $headers .= "X-Mailer: PHP". phpversion() ."\r\n"; 
         mail($to,$subject,$body,$headers);