Как получить ответ от SES при использовании C# SMTP API

Метод Send .Net SmtpClient возвращает значение void. Он выдает только два исключения, SmtpException и FailureToSendToRecipientsException (или что-то в этом роде).

При использовании SES для успешной доставки электронной почты SES отправляет обратно сообщение 200 OK с идентификатором сообщения. Этот идентификатор сообщения необходимо отслеживать.

Как это сделать с помощью C# SMTP API?

Изменить: в протоколе SMTP упоминаются различные коды ответов, отправляемые SMTP-сервером. Я ищу библиотеку SMTP, которая предоставляет "окончательный" код ответа вызывающему абоненту. Я уже знаю о SES HTTP API. Я не собираюсь использовать это на данный момент.


person Amith George    schedule 21.05.2013    source источник
comment
+1 хороший вопрос, кто-то задал что-то похожее, но не повторяющееся: stackoverflow.com/questions/7273949/   -  person Jeremy Thompson    schedule 24.05.2013
comment
@ Джереми Томпсон, спасибо. Мне кажется забавным, что из трех найденных мной SMTP-библиотек ни одна не возвращает код ответа. Во всяком случае, я видел этот вопрос. В принятом ответе упоминается From your code, you can only confirm that it got to the SMTP server you're using to send. И в настоящее время единственный способ сделать это - отсутствие исключения. SES вполне может вернуть код ответа с ограничением или максимальным количеством отправленных электронных писем. Это может не создать исключение (по крайней мере, я не смог найти документацию, в которой говорилось бы, что это произойдет).   -  person Amith George    schedule 24.05.2013
comment
@AmithGeorge вам удалось сделать это через SMTP? Я столкнулся с той же проблемой после того, как написал весь свой код с использованием SMTP :( Если это не сработает, мне нужно будет использовать SES API. Спасибо.   -  person HopeKing    schedule 11.01.2018


Ответы (1)


Пробовали ли вы оболочку C# Amazon SES (Simple Email Service)?

У него есть метод 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;
    }
}

Я не думаю, что вы можете получить MessageId с помощью System.Net.Mail.SmtpClient, вам нужно будет использовать Amazon.SimpleEmail.AmazonSimpleEmailServiceClient в соответствии с образцом Amazon SES: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-net.html

person Jeremy Thompson    schedule 24.05.2013
comment
Я знал о HTTP API, предлагаемом SES, и SDK, доступном для C#. Я заинтересован в использовании SMTP для SES. Таким образом, я могу динамически переключаться между использованием моего собственного SMTP-сервера, SMTP-сервера клиента или SMTP-сервера SES. - person Amith George; 24.05.2013
comment
Я понимаю, дело в том, что только один из этих SMTP-серверов вернет MessageId. Я бы склонялся к созданию интерфейса и использованию реализации SES для сервера SES и System.Net.Mail.SmtpClient для остальных. - person Jeremy Thompson; 24.05.2013
comment
Only one of those will the MessageId - Верно. Но все SMTP-серверы вернут код ответа. Код ответа от SES будет содержать MessageId. Это единственная разница. Должен быть SMTP-клиент, который предоставляет последний код ответа, возвращенный сервером. - person Amith George; 24.05.2013
comment
Обрабатывает ли он вложения в настоящее время? - person sobelito; 28.08.2013