使用 PHP 邮件函数,防止发送的电子邮件被视为垃圾邮件

14

我写了一个用于发送邮件的 PHP 脚本。

我的脚本如下:

$headers =  'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: abc@yahoo.com' . "\r\n";

// Email Variables
$toUser  = "someone@yahoo.com"; // 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";
}

当然,我用一个有效的电子邮件地址作为发件人和收件人。我确实收到了这封邮件,但它被归为垃圾邮件。所以我进行了谷歌研究。这是因为我的“header”脚本有问题吗?如果不是,那么是什么原因导致我的脚本发送垃圾邮件?有解决方案吗?

14个回答

15
请尝试这个:
$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 - Sajid anwar

8
也许问题在于雅虎使用domainkeys验证,鉴于邮件并非来自雅虎服务器,这种验证很可能会失败。

7
当我遇到过类似问题时,我查看了邮件头并发现我的主机使用了SpamAssassin。所以我搜索了“SpamAssassin分数”,找到了大量关于如何不正确(因此正确)地编写电子邮件的信息。
例如:SpamAssassin分数列表

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地址。


3
                   **This Works Perfectly fine for me**     
                        $to="reciever@reciever.com";
                        $subject="This is Your Message";
                        $from = 'Sender <noreply@sender.com>';
                        $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);

3
使用mxtoolbox.com来检查服务器IP是否被列入黑名单。此网站还可以帮助您进行一些与电子邮件相关的检查。
当然,垃圾邮件过滤器内部运行了许多检查。如前所述,请检查电子邮件标题以获取有关垃圾邮件过滤器对垃圾邮件的评级的详细信息。
希望这可以帮助你!

2
我遇到了同样的问题:
问题在于当您在“From:”部分之前指定内容类型时,邮件会被识别为垃圾邮件。
但是如果您先指定“From:”再添加内容部分,则邮件将正常发送,并让您感到愉快和好奇。

1

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


1
如果您的网站域名是mydomain.com,则在发件人头中,请确保使用someone@mydomain.com。

1
  1. 在您的服务器上尝试对 SPF(发件人策略框架,请谷歌SPF记录)记录进行排序。
  2. 确保您从服务器/域上的现有帐户发送电子邮件。
  3. 确保您在标题中包含了回复地址。

这些都是您可以尝试的基本操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接