【问题标题】:Generating an email using either AutodiscoverURL or SmtpClient使用 AutodiscoverURL 或 SmtpClient 生成电子邮件
【发布时间】:2023-03-20 07:55:01
【问题描述】:

我正在通过我的 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();

【问题讨论】:

  • 您是否在“发件人”地址中使用的域上配置了 SPF/DKIM DNS 记录?如果没有,垃圾邮件文件夹也就不足为奇了。
  • 您将在哪里执行这些配置?
  • 在发件人地址所在域的 DNS 区域文件中
  • 我相信我找到了解决 gmail 问题的方法。我将以下内容添加到标题 mailmessage.Headers.Add("Message-Id", String.Format("<{0}@{1}>", Guid.NewGuid().ToString(), "ApplicationEmail@state.gov")); 但是它似乎不适用于 Outlook 消息。

标签: c# email smtpclient smtp-auth


【解决方案1】:

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

我假设如果您在同一域上 Exchange 发送到 Exchange,那么这些邮件永远不会离开您的 Intranet,因此它们不会被认为是垃圾邮件。但是对于通过 SMTP 的东西,它会通过 Gmail 或 Outlook 上的垃圾邮件过滤器。您无法在这些系统上配置垃圾邮件过滤器。显然,您发送的任何电子邮件都会触发过滤器。修改电子邮件。您可能会查看this 之类的文章,以便改进内容,但要认识到最终您无法控制。

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2011-07-03
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多