C# - 发送电子邮件 - STOREDRV.Submission.Exception: OutboundSpamException

19

我正在编写一个小工具来帮助处理一些MySQL任务,每晚在任务失败时将其发送到我的个人电子邮件(这是个人项目,因此没有公司smtp服务器或其他任何东西,邮件通过公共Outlook账户发送)。

我测试了大约5次,每次都成功发送,但现在尝试发送电子邮件时,我得到了这个异常:

发送测试邮件出错:Transaction failed. The server response was: 5.2.0 STOREDRV.Submission.Exception:OutboundSpamException; Failed to process message due to a permanent exception with message WASCL UserAction verdict is not None. Actual verdict is Suspend, ShowTierUpgrade. OutboundSpamException: WASCL UserAction verdict is not None. Actual verdict is Suspend, ShowTierUpgrade.[Hostname=BY2PR0101MB1461.prod.exchangelabs.com]

这是我自己的一个小失误 - 没想到在第6次尝试后Outlook会将其视为垃圾邮件 - 我是否可以在Outlook中做些什么来纠正这个问题?

我正在使用我在Outlook中创建的服务帐户向我的个人收件箱发送这些电子邮件。

涉及到的实际代码:

class JobMailer
{
    private string email_to;
    private string email_from;
    private string password;
    private string email_smtp;
    private bool use_ssl;
    private int port;

    public void Send(string subject, string body)
    {
        MailMessage mail = new MailMessage(email_from, email_to);
        using (SmtpClient client = new SmtpClient
        {
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            EnableSsl = use_ssl,
            Host = email_smtp,
            Timeout = 100000,
            Port = port,
            Credentials = new NetworkCredential(email_from, password)
        })
        {
            mail.Subject = subject;
            mail.Body = body;
            client.Send(mail);
        }


    }

    public JobMailer(string emailTo, string smtp, string emailFrom, string pw, int p, bool ssl)
    {
        email_to = emailTo;
        email_from = emailFrom;
        password = pw;
        email_smtp = smtp;
        port = p;
        use_ssl = ssl;
    }

}

你是否正确使用SSL进行身份验证?此外,我听说Outlook对使用免费帐户发送的自动邮件非常挑剔。我建议完全使用其他东西。 - Tom F
@Igneous01,我遇到了与nodemailer相同的问题。我已经通过outlook确认了电子邮件,尽管电子邮件已经发送,但仍然出现错误。在阅读您的帖子后,我检查了我的收件箱,但在outlook中没有看到新的确认电子邮件。您知道outlook的政策是否有任何变化吗? - Steve Smith
2个回答

33

我解决了这个问题,方法是验证我想使用的账户。每次遇到此错误,都会向该帐户发送电子邮件,并提供有关解决错误所需进行的操作说明。通常需要使用电话号码进行验证。


4
顺便提一下,我已经进行了两次验证——第一次让我能够以编程方式发送消息,几天后在开发时,我遇到了某种限制,并收到了此处描述的“OutboundSpamException”,不得不再次进行验证(同一电话号码有效)。有点担心 Outlook 不会喜欢为网站注册发送大量确认电子邮件,也就是说,“验证要求何时结束”?我希望 ShowTierUpgrade 的意思是我可以升级到某个类型的计划以便发送大量电子邮件,但实际上只是重新验证。/耸肩 - ruffin

0

在使用SMTP向Outlook.com发送大量电子邮件时,我遇到了这个错误。

为了解决这个问题,我只需在发送之间添加5秒的延迟,例如:

foreach(var mail in mailToSend)
{
    await smtpClient.SendMailAsync(mail);
    Console.WriteLine("Sent email: " + mail);
    await Task.Delay(5000);
}

如果您不是在进行测试,那么您可以联系Outlook.com团队,并要求将您的IP列入白名单(请确保您已经设置了SPF、rDNS等)。


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