Sto tentando di inviare e-mail contenenti caratteri non ASCII utilizzando le classi SmtpClient
e MailMessage
.Codifica soggetto su SmtpClient/MailMessage
Sto utilizzando un servizio di mailing esterno (MailChimp) e alcune delle mie email sono state respinte dal loro server SMTP. Li ho contattato e questo è ciò che rispondevano:
Risulta l'oggetto viene codificato Base64 e quindi Quoted-Printable codificato, che generalmente dovrebbe andare bene, ma uno dei personaggi sia spezzato su due righe . Quindi, quando le righe del soggetto sono un po 'più lunghe, per essere elaborate correttamente, vengono suddivise su due righe. Quando si utilizza la stampa quotata UTF-8 in una riga dell'oggetto, non si suppone che le stringhe di caratteri siano interrotte tra le righe. Invece una linea dovrebbe essere cortocircuitata in modo che la stringa di caratteri completa rimanga insieme. In questo caso, ciò non sta accadendo, quindi la stringa di caratteri che rappresenta un singolo carattere viene interrotta su più righe, e quindi non è validamente codificata in UTF-8.
Il soggetto problematico è la seguente:
Subject: XXXXXXX - 5 personnes vous ont nommé guide
Che è, in UTF-8/Base64:
Subject: WFhYWFhYWCAtIDUgcGVyc29ubmVzIHZvdXMgb250IG5vbW3DqSBndWlkZQ==
Perché intestazione supererebbe una certa lunghezza massima (sono incerto se si tratta della codifica Quoted-Printable e del limite di 76 caratteri per riga o del limite dell'intestazione SMTP), dopo la codifica e la divisione, l'intestazione diventerà:
Subject: =?utf-8?B?WFhYWFhYWCAtIDUgcGVyc29ubmVzIHZvdXMgb250IG5vbW3D?=
=?utf-8?B?qSBndWlkZQ==?=
Apparentemente ciò causa un problema durante la decodifica (poiché la prima riga non può essere decodificata su una stringa valida). Non sono sicuro di comprendere appieno il problema e ho le seguenti domande:
- Perché il? Utf-8? B? parte ripetuta? Non dovrebbe accadere la codifica QP prima di dividere la linea e quindi la sua intestazione non dovrebbe essere ripetuta?
- Dopo la decodifica QP, non dovremmo finire con una stringa Base64 valida a 1 riga?
- C'è uno spazio all'inizio della seconda linea che è al di fuori della codifica QP, potrebbe essere questo il problema?
- L'encoder è guasto o è il decodificatore?
Si noti inoltre che alcuni altri server SMTP accetteranno questo messaggio, sebbene ciò non significhi che sia valido.
Come soluzione alternativa, ho provato a disabilitare la codifica Base64, che a quanto pare non è necessaria, tuttavia la classe MailMessage ha una proprietà BodyTransferEncoding che controlla questa codifica, ma solo per la parte del corpo del messaggio. Nessuna proprietà sembra controllare la codifica "trasferimento" dell'oggetto.
Il work-around non funziona per me. I miei caratteri non-ascii appaiono ancora come "simboli dall'aspetto strano" nell'oggetto. :( – PussInBoots
Potresti avere un problema diverso: il mio non era con caratteri strani, ma le e-mail venivano rifiutate da alcuni server SMTP. –
oh ok, bello sapere. – PussInBoots