2016-01-06 16 views
6

Ho un'applicazione console e ho installato il pacchetto mailkit per scopi di messaggistica.Modo consigliato per usare smtp4dev come server dei messaggi del client mailkit

Ho il codice nel metodo principale per testare il client smtp di mailkit. Ho un server fittizio smtp4dev in esecuzione e il codice client è il example code of mailkit in github con la parte di autenticazione commentata, l'host è localhost e la porta 26, corrispondente alla configurazione smtp4dev.

Quando il codice del client viene eseguita la smtp4dev stop running e un non gestite occurrs eccezione, IOException: Unable to read data from the transport connection: an existing connection was forcibly closed by the remote host.

Come posso configurare smtp4dev di ricevere un messaggio dal client mailkit?

risposta

0

Avete il client.Disconnect(true);? Il messaggio di errore suggerisce che non lo fai.

+1

Yes I fare. Il problema principale è che smtp4dev sta ascoltando la porta 26 e quando il codice client esegue gli stop smtp4dev. Sembra che un'eccezione sia stata lanciata all'interno del codice smpt4dev. – Dalsier

8

Dopo alcune prove ed errori, sono riuscito ad avere successo con il seguente accordo. smtp4dev options

Il mio codice è simile a https://github.com/jstedfast/MailKit#sending-messages:

public void DoMail() 
{ 
    var message = new MimeMessage(); 
    message.From.Add(new MailboxAddress("Joey", "[email protected]")); 
    message.To.Add(new MailboxAddress("Alice", "[email protected]")); 
    message.Subject = "How you doin?"; 

    message.Body = new TextPart("plain") 
    { 
     Text = @"Hey Alice, 

What are you up to this weekend? Monica is throwing one of her parties on 
Saturday and I was hoping you could make it. 

Will you be my +1? 

-- Joey 
" 
    }; 

    using (var client = new SmtpClient()) 
    { 
     // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS) 
     client.ServerCertificateValidationCallback = (s, c, h, e) => true; 

     client.Connect("localhost", 25, false); 

     // Note: since we don't have an OAuth2 token, disable 
     // the XOAUTH2 authentication mechanism. 
     client.AuthenticationMechanisms.Remove("XOAUTH2"); 

     // Note: only needed if the SMTP server requires authentication 
     //client.Authenticate("joey", "password"); 

     client.Send(message); 
     client.Disconnect(true); 
    } 
} 

Per coloro che non possono accedere a Imgur:
Domain Name: localhost
Ascolta Interfaccia: 0.0.0.0
Numero porta: 25 (anche se, nel caso di Dalsier, Dalsier userebbe 26)
Estensioni:

  • [] implicito SSL/TLS
  • [x] 8BITMIME
  • [] STARTTLS
  • [] AUTH
  • [x] Misura

SSL/TLS certificato: Nessuno
Password certificato SSL/TLS: Nessuna
Dimensione messaggio massima (byte): 0
Ricevi Timeout (ms): 30000
Opzioni:

  • [] richiesta autenticazione
  • [] Richiede connessione sicura
  • [] consentire solo l'autenticazione del testo chiaro su connessioni protette
+1

questa linea ha fatto la differenza: client.ServerCertificateValidationCallback = (s, c, h, e) => true; Anche con tutte le configurazioni di cui sopra, senza che ciò fallisca ancora. – jpgrassi