【问题标题】:How to get response from SES when using C# SMTP API使用 C# SMTP API 时如何从 SES 获得响应
【发布时间】:2013-05-15 18:27:29
【问题描述】:

.Net SmtpClient 的 Send 方法返回 void。它只抛出两个异常,SmtpExceptionFailureToSendToRecipientsException(或类似的东西)。

使用 SES 时,为了成功发送电子邮件,SES 会发回带有消息 ID 的 200 OK 消息。需要跟踪此消息 ID。

如何使用 C# SMTP api 执行此操作?

编辑:SMTP 协议提到了 SMTP 服务器发送的各种响应代码。我正在寻找一个向调用者公开“最终”响应代码的 SMTP 库。我已经知道 SES HTTP API。我暂时不打算使用它。

【问题讨论】:

  • +1 好问题,有人问过类似但不重复的问题:stackoverflow.com/questions/7273949/…
  • @JeremyThompson,谢谢。我发现在我发现的三个不同的 SMTP 库中,没有一个返回响应代码,这很有趣。无论如何,我确实看到了这个问题。接受的答案提到From your code, you can only confirm that it got to the SMTP server you're using to send。目前唯一的方法是没有异常。 SES 可以很好地返回限制或最大电子邮件发送响应代码。这可能不会创建异常(至少我找不到说明它会的文档)。
  • @AmithGeorge 你能通过 SMTP 完成这项工作吗?使用 SMTP 编写所有代码后,我面临完全相同的问题 :( 如果它不起作用,则需要使用 SES api。谢谢。

标签: c# amazon-web-services smtp amazon-ses


【解决方案1】:

你试过Amazon SES (Simple Email Service) C# Wrapper吗?

它有一个 SendEmail 方法,该方法返回一个带有 MessageId 的类:

public AmazonSentEmailResult SendEmail(string toEmail, string senderEmailAddress, string replyToEmailAddress, string subject, string body)
{
       List<string> toAddressList = new List<string>();
       toAddressList.Add(toEmail);
       return SendEmail(this.AWSAccessKey, this.AWSSecretKey, toAddressList, new List<string>(), new List<string>(), senderEmailAddress, replyToEmailAddress, subject, body);
}

public class AmazonSentEmailResult
{
    public Exception ErrorException { get; set; }
    public string MessageId { get; set; }
    public bool HasError { get; set; }

    public AmazonSentEmailResult()
    {
        this.HasError = false;
        this.ErrorException = null;
        this.MessageId = string.Empty;
    }
}

我认为您无法使用 System.Net.Mail.SmtpClient 获取 MessageId,您需要使用 Amazon.SimpleEmail.AmazonSimpleEmailServiceClient 根据 Amazon SES 示例:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-net.html

【讨论】:

  • 我知道 SES 提供的 HTTP API 和可用于 C# 的 SDK。我有兴趣将 SMTP 用于 SES。这样我就可以在使用自己的 SMTP 服务器、客户端的 SMTP 服务器或 SES SMTP 服务器之间动态切换。
  • 我明白了,问题是只有一个 SMTP 服务器会返回 MessageId。我倾向于制作一个接口并为 SES 服务器使用 SES 实现,为其他人使用 System.Net.Mail.SmtpClient。
  • Only one of those will the MessageId - 是的。但是所有的 SMTP 服务器都会返回一个响应代码。 SES 的响应代码将包含 MessageId。这是唯一的区别。必须有一个 SMTP 客户端公开服务器返回的最后一个响应代码。
  • 目前是否处理附件?
猜你喜欢
  • 2018-03-17
  • 2020-11-04
  • 2018-12-18
  • 2013-06-25
  • 1970-01-01
  • 2020-10-14
  • 2018-01-02
  • 2018-12-22
  • 2013-01-04
相关资源
最近更新 更多