2014-10-24 4 views
5

Sperando che qualcuno sia in grado di dare una mano, mi sono guardato attorno e non riesco a trovare una risposta da nessuna parte.Problema di abbondanza di punti client SMTP .NET 4.5 durante il recapito alla directory di prelievo

Sto creando un messaggio di posta utilizzando che verrà consegnato a una directory di prelievo specificata, questo codice è stato utilizzato numerose volte in passato senza problema. Ora, però, quando ispeziono il file risultante e più specificamente un URL all'interno del file eml, posso vedere che nel mezzo c'è un doppio .. Da quello che ho letto, capisco che questo è parte del protocollo SMTP per dot roba se il primo carattere di una riga nel messaggio inizia con .. Questo file verrà in seguito ritirato da un altro servizio che alla fine eseguirà l'invio dell'e-mail.

Sono stato in grado di restringerlo fino alla linea esatta quando chiamo client.Send(). Se ispeziono il corpo del messaggio prima dell'invio, l'URL è formato correttamente. Ispezionando il corpo del messaggio dopo che l'ho chiamato, c'è l'.. presente nell'URL.

La mia domanda, o domande suppongo, sono i seguenti:

  1. Qualcun altro ha incontrato un problema con ripieno di punti quando si utilizza SmtpDeliveryMethod.SpecifiedPickupDirectory?
  2. Di chi è il lavoro per gestire correttamente questo? .NET SMTP o il servizio secondario che preleva questo messaggio in un secondo momento e lo invia alla destinazione finale?
  3. Qualche consiglio su come risolvere questo problema?

Ho già provato il approach described here, ma non riesce con numerose eccezioni.

Sono principalmente alla ricerca di un modo per salvare questo file eml in un percorso sul disco che può essere successivamente recuperato e inviato, le mie conoscenze su C# sono ancora abbastanza limitate quindi potrebbe esserci qualcosa di semplice. Sono appena finito guardando, quindi qualsiasi consiglio o guida sarebbe molto apprezzato!

Ho creato un piccolo esempio di codice per provare a ricreare il problema, questo non è il contenuto esatto che sto usando, ma mostra che dopo l'invio tramite il metodo client.Send(), ci sono 2 '..' all'inizio della stringa.

using (var client = new SmtpClient()) 
{ 
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
client.PickupDirectoryLocation = @"C:\temp"; 
var message = new MailMessage(); 
message.To.Add(new MailAddress("[email protected]")); 
message.From = new MailAddress("[email protected]"); 
message.Subject = "Smtp Dot Stuffing Test"; 
message.Body = ".A.B.C..... .0.1.2.3.4.5.6.7.8.9"; 
client.Send(message); 
} 
+0

Puoi mostrarci qualche codice rilevante? – Dawnkeeper

+0

@Dawnkeeper Ho appena aggiunto un piccolo pezzo di codice di esempio per dimostrare il problema –

risposta

3

SmtpClient non deve essere riempitivo di byte quando si salva in un file. Ciò è necessario solo quando effettivamente "caricare" il flusso dei messaggi su un server SMTP per evitare di terminare prematuramente il comando DATA (che termina con la riga: ". \ R \ n").

Se SmtpClient è un riempimento di byte durante il salvataggio in un file, si tratta di un comportamento piuttosto interrotto.

Poiché è impossibile aggirare il problema se si utilizza System.Net.Mail (e presumo che lo sia), si consiglia di utilizzare MimeKit per creare e salvare il messaggio in un file.

Quindi, se è necessario ri-analizzare il messaggio e inviarlo tramite SMTP, è possibile utilizzare MailKit per farlo.

+0

Sì, sto usando System.Net.Mail quindi sembra che ci sia qualcosa di rotto lì dentro. Almeno non stavo facendo nulla di chiaramente sbagliato, darò il tuo suggerimento e vedremo come andrò avanti.Grazie per il consiglio –

+0

Ho appena provato questo e una volta ho chiamato il metodo WriteTo() di MimeKits e ho controllato il file eml risultante che aveva tutto formattato bene. Grazie per il suggerimento su Mimekit, libreria abbastanza utile! –

+0

No prob, e grazie! – jstedfast

Problemi correlati