2013-05-21 46 views
13

Il metodo Send di .Net restituisce void. Solleva solo due eccezioni, SmtpException e un FailureToSendToRecipientsException (o qualcosa del genere).Come ottenere risposta da SES quando si utilizza l'API C# SMTP

Quando si utilizza SES, per la consegna e-mail di successo SES restituisce un messaggio 200 OK con l'ID messaggio. Questo ID messaggio deve essere tracciato.

Come si utilizza l'API C# SMTP?

Modifica: il protocollo SMTP menziona vari codici di risposta inviati dal server SMTP. Sto cercando una libreria SMTP che esponga il codice di risposta "finale" al chiamante. Sono già a conoscenza dell'API HTTP SES. Non sto cercando di usarlo per il momento.

+0

+1 buona domanda, qualcuno ha chiesto qualcosa di simile ma non duplicato: http://stackoverflow.com/questions/7273949/smtpclient-get-result-from-server-on-send –

+0

@JeremyThompson, grazie. Trovo divertente quello delle tre diverse librerie SMTP che ho trovato, nessuna restituisce il codice di risposta. Ad ogni modo, ho visto quella domanda. La risposta accettata menziona "Dal tuo codice, puoi solo confermare che è arrivato al server SMTP che stai usando per inviare". E attualmente l'unico modo per farlo è l'assenza di un'eccezione. SES potrebbe benissimo restituire un codice di risposta inviato a un indirizzo di posta elettronica limitato o limitato. Questo potrebbe non creare un'eccezione (almeno non ho potuto trovare la documentazione dicendo che sarebbe). –

+0

@AmithGeorge sei riuscito a ottenere questo tramite SMTP? Sto affrontando lo stesso identico problema dopo aver scritto tutto il mio codice usando SMTP :(Se non funziona, sarà necessario utilizzare l'API SES. Grazie – HopeKing

risposta

3

Hai provato il Amazon SES (Simple Email Service) C# Wrapper?

Ha un metodo SendEmail che restituisce una classe con il 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; 
    } 
} 

io non credo che si può ottenere il MessageId con System.Net.Mail.SmtpClient è necessario utilizzare Amazon.SimpleEmail.AmazonSimpleEmailServiceClient come per l'esempio di Amazon SES: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-net.html

+0

Ero a conoscenza dell'API HTTP offerta da SES e dell'SDK disponibile per C#. Sono interessato a utilizzare SMTP per SES. In questo modo posso passare in modo dinamico tra l'utilizzo del mio server SMTP, del server SMTP del client o del server SES SMTP. –

+0

Capisco, il fatto è che solo uno di quei server SMTP restituirà il MessageId Sarei propenso a creare un'interfaccia e utilizzare l'implementazione SES per il server SES e System.Net.Mail.SmtpClient per gli altri –

+0

'Solo uno di questi sarà MessageId' - Vero. Ma tutti i server SMTP restituirà un codice di risposta.Il codice di risposta da SES conterrà il MessageId.Questa è l'unica differenza.Deve esistere un client SMTP che espone l'ultimo codice di risposta restituito dal server. –