2011-08-30 12 views

risposta

83

Non ho provato personalmente, ma secondo this, è sufficiente:

subject = subject.Replace('\r', ' ').Replace('\n', ' '); 

o qualcosa di equivalente.

Internamente, la classe MailMessage controllerà il soggetto con:

if (value != null && MailBnfHelper.HasCROrLF(value)) 
{ 
    throw new ArgumentException(SR.GetString(SR.MailSubjectInvalidFormat)); 
} 

Così l'unica limitazione (per ora) sembra essere la presenza di CR o LF.

+0

funziona come un fascino – Filip

+1

Grazie per questo. Ma devo dire - c'è qualche ragione per cui Microsoft non potrebbe semplicemente * dire * che le nuove linee non sono permesse? –

+0

Sapete che la documentazione è difficile ;-) Il motivo per cui non è consentito è molto probabile, che CRLF ha scopi molto speciali nel formato del messaggio (si veda [RFC5322] (https://tools.ietf.org/html/rfc5322)) e non volevano preoccuparsi di modificare automaticamente i dati dell'utente, ma piuttosto fallire e lasciare che lo facesse manualmente (come mostrato sopra). –

10

Inoltre, vi è un limite di 168 caratteri, quindi è consigliabile verificarlo.

AGGIORNAMENTO: scusate questa è una cazzata completa :) Nel mio caso deve essere stata un'interruzione di linea.

+2

C'è qualche documentazione per il collegamento a questo? – mlhDev

+0

Io non la penso così, l'abbiamo appena capito per tentativi ed errori. Potrei sbagliarmi, puoi provare tu stesso e pubblicare il risultato. –

+0

Mi sembra buono, ero solo curioso di sapere come sei arrivato con la risposta (e un valore così strano). Già +1 - una soluzione è una soluzione :) – mlhDev

3

Per VB.NET

subject = subject.Replace(vbNewLine, "") 
+2

Ho presupposto 'subject = subject.Replace (vbCr," ") .Replace (vbLf," ")' – JNF

4

ho provato per .NET 2.0 e 4.5 per e permette di inviare i soggetti più lunghi di 168 caratteri. Ho usato Papercut per controllare la posta.

+3

Papercut sembra interessante, ma dovresti aver aggiunto un commento a mike la risposta di Nelson invece di (non) 'rispondere' alla domanda. –

0

So che questo ha già risposto, ma va:

In primo luogo, è necessario tagliare il soggetto poi conto della lunghezza del soggetto massima (What is the email subject length limit?):

subject = subject.Trim(); 
subject = subject .Substring(0, Math.Min(subject .Length, 78)); 

Questo consente di eliminare ogni nuova linee o spazi vuoti all'inizio e alla fine. Quindi la sottostringa viene utilizzata per limitare la lunghezza del soggetto.

Problemi correlati