使用AutodiscoverURL或SmtpClient

时间:2016-12-27 18:30:43

标签: c# email smtpclient smtp-auth

我正在通过我的MVC应用程序生成电子邮件,但是我在开发环境和测试/生产环境之间收到了不同的结果。我尝试使用AutodiscoverUrl()SmtpClient()进行实施。我们使用本地计算机上的IIS服务器进行开发,并在服务器上进行测试/生产。

使用SmtpClient

  • 正在开发中

    • 发送到我们域内地址的电子邮件正在按预期工作,接收投放通知

    • 发送到@ gmail.com和@ outlook.com等电子邮件发送的邮件是正确的,但@gmail直接进入垃圾邮件文件夹,@ outlokk进入收件箱,有时收到通知或交付完成

  • 在测试/部署中
    • 发送到我们域中包含地址的电子邮件正在按预期工作,没有发送通知
    • 发送到@ gmail.com和@ outlook.com等电子邮件,发送的邮件是正确的,但它直接进入垃圾邮件文件夹,没有通知或交付完成

AutodiscoverUrl()

  • 正在开发中
    • 发送到我们域内地址的电子邮件,发送来自我的电子邮件,代表我希望它来自的电子邮件,已发送的电子邮件蚂蚁阅读收据在我的电子邮箱中
    • 向@ gmail.com发送电子邮件,发送的邮件是正确的,发送的电子邮件是在我发送的文件夹中,没有阅读回执
    • 发送到@ outlook.com来自的是正确的,发送的电子邮件在我的电子邮件发送文件夹中,阅读的收据进入我的电子邮箱,收据中的“收件人”空白(原始电子邮件发送给谁)
  • 在测试/部署中
    • 到发送的相同域名的电子邮件地址是正确的但是没有已读回执,且没有任何已发送文件夹中的项目
    • 到@ gmail.com发送的是正确的,但是它显示在垃圾邮件文件夹中并且需要永久显示,没有已读回执,且没有已发送文件夹中的项目
    • 到@ outlook.com发送的是正确的,但它被传送到垃圾邮件文件夹,没有已读回执,没有发送文件夹中的项目

我使用的代码是 -

 using (SmtpClient sender = new SmtpClient("mail.state.gov"))
        {
            using (MailMessage mailmessage = new MailMessage())
            {
                mailmessage.To.Add(address.Email);
                mailmessage.From = (new MailAddress("ApplicationEmail@state.gov"));
                mailmessage.Subject = subjectline;
                mailmessage.Body = Body(personID);
                mailmessage.Priority = MailPriority.Normal;
                mailmessage.IsBodyHtml = true;
                mailmessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure |
   DeliveryNotificationOptions.OnSuccess;
                mailmessage.Bcc.Add("ApplicationEmail@state.gov"); 

                sender.Send(mailmessage);
            }
        }

然后我尝试了

        string from = "ApplicationEmail@state.gov";
        ExchangeService service = new ExchangeService();
        service.AutodiscoverUrl(from);

        EmailMessage message = new EmailMessage(service);
        message.Subject = subjectline;
        message.Body = Body(personID);
        message.ToRecipients.Add(address.Email);
        message.From = from;
        message.IsReadReceiptRequested = true;
        message.Save();

        message.SendAndSaveCopy();

1 个答案:

答案 0 :(得分:1)

Exchange方法取决于当前登录的用户。在您的工作站上,这总是。在“真正的”IIS服务器上,它将是该站点配置为执行的任何服务帐户。您收到时,您无法完全控制“发件人”地址中显示的内容,这就是出现“代表”内容的原因。

我认为如果您从 Exchange发送到Exchange ,在同一个域上,则邮件不会离开您的Intranet,因此不会被认为是垃圾邮件。但对于通过SMTP的内容,它会通过Gmail或Outlook上的垃圾邮件过滤器。您无法在这些系统上配置垃圾邮件过滤器。显然,你发送的任何电子邮件都会使过滤器绊倒。修改电子邮件。您可以查看this等文章,以便改进内容,但要认识到最终您无法控制。