以编程方式生成的 HTML 电子邮件被 Outlook 归类为垃圾邮件 [重复]

Posted

技术标签:

【中文标题】以编程方式生成的 HTML 电子邮件被 Outlook 归类为垃圾邮件 [重复]【英文标题】:Programatically generated HTML email is classified as junkmail by Outlook [duplicate] 【发布时间】:2011-01-22 23:19:58 【问题描述】:

我有一个需要通过 smtp 发送 html 电子邮件的 C# 应用程序。电子邮件可以正常发送,但 Outlook 上的默认安全设置(低)将其归类为垃圾邮件。

这不完全是一个大问题,但这很烦人,尤其是因为垃圾文件夹关闭了 html。我不想让我公司的每个人都做一些特别的事情来以可读的方式接收这些电子邮件,有人知道我可以做什么让 Outlook 认为这是垃圾邮件吗?

制作电子邮件的代码(基本的东西)。Config 是一个对象,它保存与这些东西的配置相关的字符串,toList 是电子邮件地址的列表,正文/主题由其他函数调用填充。

编辑:补充一下,目前我只是将其发送给自己。在实时版本中,我们将看到在最坏的情况下被发送到的人不到 100 人。

另一个编辑:事实证明,对于我前几天生成的较长的电子邮件(最糟糕的是大约 200-300 行),而不是我生成的较短的电子邮件,这种情况发生的频率要高得多现在正在生成。我想这是一个足够合理的过滤标准。

        SmtpClient smtp = new SmtpClient(config.SmtpServer);

        NetworkCredential net = new NetworkCredential();
        net.UserName = config.SmtpLogin;
        net.Password = config.SmtpPass;

        smtp.Credentials = net;

        MailMessage msg = new MailMessage();
        msg.IsBodyHtml = true;
        msg.Priority = MailPriority.Normal;
        msg.To.Add(String.Join(",", toList.ToArray()));
        msg.From = new MailAddress(fromAddr, "Build Server");
        msg.Body = "Blah html is here";
        msg.Subject = "Build successful: #numberhere and stuff";

        try
        
            smtp.Send(msg);
        
        catch (SmtpException)
        
            //stuff
        

【问题讨论】:

我认为这与您的 Outlook 服务器配置有关,而不是与您的 SMTP 客户端代码有关——您在此处显示的任何内容都不会触发“这是垃圾邮件”过滤器。 . 【参考方案1】:

我认为这与其说是编程问题,不如说是配置问题。收件人需要将fromAddr 添加到他们的“安全发件人列表”中。

问题是,如果有办法配置电子邮件以绕过垃圾邮件过滤器,那么所有垃圾邮件发送者都会这样做。

如果是制作完美的非垃圾邮件,那么它有时可能会奏效,而其他时候则无效。所有垃圾邮件发送者都会这样做。

您将不得不告诉所有人允许来自该帐户的电子邮件。而且您可能不应该以任何不必要的解剖学或医学参考文献开头电子邮件。

【讨论】:

调查了一下,这大概就是答案了。 =[ 哦,好吧,给我的用户带来了些许不便。【参考方案2】:

如果您的邮件 To 包含一个大列表,则可能会被视为垃圾邮件。尝试向每个人发送一封独特的电子邮件,而不是群发电子邮件。

但是:

如果您要遍历您的列表并为每个用户发送一封电子邮件,您可能需要考虑创建一个允许失败和重试的队列。

我们的系统中存在类似问题,在快速连续发送大约 20,00 条消息后(即:在一个 foreach 循环中),外发邮件服务器拒绝了任何进一步的中继尝试。

我们改为将外发消息添加到数据库表中,并编写了一项服务,该服务将一次处理指定数量的电子邮件,然后暂停指定时间后再继续。

此外,这使我们能够捕获失败,然后设置重试规则。在 X 次尝试后,我们将消息标记为永久失败并报告问题。我们发现这提供了一个更可靠的用户系统来接收他们的邮件,而且他们不再被标记为垃圾邮件。

【讨论】:

+1 我同意你的看法@shimms。我有一个类似的问题。我首先使用循环来遍历收件人地址。邮件被快速发送,因此“发件人”帐户在许多客户中被列为垃圾邮件帐户。我们解决了这个问题,只需在每条消息之间等待一两秒。 有帮助,但在这种情况下,我将使用小得多的规模,所以我认为沿着这些路线走有点矫枉过正。【参考方案3】:

如果您一次发送多封邮件,请分批发送,以免服务器泛滥。 检查电子邮件文本中是否有可能被某些过滤器视为垃圾邮件的单词和符号。 您可能还想查看 SPF 之类的内容,以减少您的邮件被标记为垃圾邮件的可能性。

【讨论】:

【参考方案4】:

在创建MailMessage时在代码中添加以下行

    msg.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");

【讨论】:

【参考方案5】:

只是一个想法,尝试遍历您的列表并发送单独的电子邮件。此外,尝试尝试不同的措辞和 html 结构。

【讨论】:

以上是关于以编程方式生成的 HTML 电子邮件被 Outlook 归类为垃圾邮件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式生成的数字签名电子邮件在 Outlook 中显示正确,但在 Gmail 中显示不正确

可以以编程方式创建电子书吗? [关闭]

如何以编程方式填写和获取 Excel 电子表格的 PDF 输出?

如何以编程方式查找网址是电子商务网站还是非电子商务网站?

Angular - 以编程方式提交表单

以编程方式发布包含用户指定的 HTML 和纯文本正文的 Gmail 草稿