使用php邮件功能防止作为垃圾邮件处理的已发送电子邮件

时间:2009-04-14 08:57:26

标签: php header email email-spam

我写了一个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";
}

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

14 个答案:

答案 0 :(得分:12)

请试试这个:

$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 :(得分:8)

也许问题是雅虎使用domainkeys验证,鉴于邮件实际上并非来自雅虎的服务器,这可能会失败。

答案 2 :(得分:7)

当我遇到类似的问题时,我查看了标题,发现我的主机使用了SpamAssassin。因此,我搜索了“SpamAssassin得分”,并发现了大量关于如何错误(并因此正确)形成电子邮件的信息。

例如:SpamAssassin score list

答案 3 :(得分: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地址。

答案 4 :(得分:3)

使用mxtoolbox.com检查要列入黑名单的服务器IP。此网站也可以帮助您进行几个与电子邮件相关的检查。

当然,垃圾邮件过滤器内部会有很长的检查列表。如已建议,请查看电子邮件标题,以获取有关垃圾邮件的垃圾邮件过滤器评级的详细信息。

希望有所帮助!

答案 5 :(得分: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);

答案 6 :(得分:2)

如果您的网站域名是mydomain.com,那么在From标题中请确保使用someone@mydomain.com

答案 7 :(得分:2)

我遇到了同样的问题:

问题是当你在&#34; From:&#34;之前指定内容类型时部分,邮件是垃圾邮件。

但是如果你指定&#34;来自:&#34;在内容部分之前,它作为普通邮件发送,让你微笑和好奇。

答案 8 :(得分:1)

正如schnalle所说,一个问题肯定是你用来发送电子邮件的smtp服务器和你指定为From的那个服务器是不同的..来自域的域名应该与你运行的服务器相同。 / p>

因此,您可以使用yahoo服务器发送电子邮件(检查是否允许smtp远程连接,但我猜他们这样做)通过smtp连接,这将解决1个问题。

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

我建议你phpMailer,免费和开源的php类发送邮件,轻松使用(我使用它通过gmail服务器发送邮件)

答案 9 :(得分:1)

  1. 在您的服务器上尝试对您的SPF(发件人政策框架,Google for SPF记录)记录进行排序。
  2. 确保从服务器/域上的现有帐户发送电子邮件。
  3. 确保标题中有回复地址。
  4. 这些是你可以尝试的基本内容。

答案 10 :(得分:1)

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

你有两个解决方案:

  • 使用Yahoo的SMTP使用abc@yahoo.com凭据从abc@yahoo.com发送邮件;
  • 使用其他来自您自己的域名;

答案 13 :(得分:0)

您可以尝试我在此处创建的邮件类和测试文件。我测试了这些文件,并可以使用不同的邮件名称向我的hotmail和gmail发送电子邮件。电子邮件标记为垃圾邮件的主要原因是因为结构(标题和邮件)未正确完成。在大多数情况下,导致问题的是换行。

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

您可以查看文件here ..