使用php邮件功能防止发送的电子邮件被视为垃圾邮件

Posted

技术标签:

【中文标题】使用php邮件功能防止发送的电子邮件被视为垃圾邮件【英文标题】:Prevent sent emails treated as junk mails using php mail function 【发布时间】:2010-10-19 07:25:34 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

请试试这个:

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

【讨论】:

你是明星@Anju【参考方案2】:

也许问题在于 yahoo 使用domainkeys 验证,由于邮件实际上并非来自 yahoo 的服务器,因此您的应用程序可能会失败。

【讨论】:

【参考方案3】:

当我遇到类似问题时,我查看了标题,发现我的主机使用 SpamAssassin。所以我在谷歌上搜索了“SpamAssassin score”,发现了大量关于如何错误地(从而正确地)形成电子邮件的信息。

例如:SpamAssassin score list

【讨论】:

【参考方案4】:

1.检查邮件内容

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

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

如果它具有实际的邮件正文和标头,则通过 SpamAssassin 的标准安装运行此邮件会得到 4.9 的垃圾邮件分数

X-垃圾邮件状态:否,分数=4.9 要求=5.0 测试=BAYES_50,HTML_IMAGE_ONLY_04, HTML_MESSAGE,MIME_HTML_ONLY,NO_DNS_FOR_FROM,NO_RELAYS autolearn=no 版本=3.2.5

由于电子邮件正文只有 HTML,它更有可能被大多数反垃圾邮件解决方案处理为可疑。

2。邮件服务器的 IP

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

3.阻止列表

还要检查您的 IP 地址是否列在阻止列表之一中。首先,请使用http://www.spamhaus.org/lookup.lasso 检查您的 IP 地址。

【讨论】:

【参考方案5】:

使用mxtoolbox.com检查服务器IP是否被列入黑名单。该网站还可以帮助您进行一些与电子邮件相关的检查。

当然,在垃圾邮件过滤器中运行的检查清单很长。如前所述,检查电子邮件标题以获取有关垃圾邮件过滤器评级的详细信息。

希望有帮助!

【讨论】:

【参考方案6】:

我遇到了同样的问题:

问题在于,当您在“发件人:”部分之前指定内容类型时,邮件会以垃圾邮件的形式出现。

但是,如果您在内容部分之前指定“发件人:”,它会像普通邮件一样发送,让您微笑和好奇。

【讨论】:

【参考方案7】:
                   **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);

【讨论】:

【参考方案8】:

正如 schnalle 所说,一个问题肯定是您用于发送电子邮件的 smtp 服务器与您指定为 From 的服务器不同。发件人的域应该与您运行的服务器相同。

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

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

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

【讨论】:

【参考方案9】:
    尝试在您的服务器上整理您的 SPF(Sender Policy Framework,Google for SPF 记录)记录。 确保从您的服务器/域上的现有帐户发送电子邮件。 确保您的标题中有回复地址。

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

【讨论】:

【参考方案10】:

如果您的网站域是 mydomain.com,则在 From 标头中确保使用某人@mydomain.com

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

您有两种解决方案:

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

【讨论】:

【参考方案14】:

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

我可以使用它向 Gmail 发送带有附件的邮件。但是,附件不适用于 hotmail。希望这会有所帮助 =)

您可以查看文件here..

【讨论】:

以上是关于使用php邮件功能防止发送的电子邮件被视为垃圾邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Zend_mail 时,我的电子邮件似乎被视为垃圾邮件,通过 Outlook 发送而没有?

如何防止通过 PHP mail() 发送的邮件进入垃圾邮件? [复制]

将电子邮件传送到程序并防止快速提交垃圾邮件

限制发送推送通知(防止垃圾邮件) - GCM

如何防止机器人发送垃圾邮件?不和谐.py

使用 CSRF 表单令牌是不是有助于防止垃圾邮件?