2010-10-14 4 views
8

HI, Sto tentando di inviare una semplice notifica utilizzando system.net.mail.mailmessage. Ho appena passato la stringa come corpo del messaggio. Ma il problema è anche se i messaggi a più righe sono stati inviati con le informazioni di formato "\ r \ n" corrette nella stringa. La posta aperta in Outlook verrà visualizzata come una lunga linea singola. Ma vista l'origine in Outlook visualizzerà il messaggio con il nuovo formato di linea corretto.MailMessage ha inviato una stringa come corpo senza newline nella prospettiva

Per esempio: messaggio originale sarebbe assomiglia:

line1 
line 2 
line 3 

Ma sarà visualizzato in Outlook come:

line1 line 2 line 3 

Visualizza sorgente da Outlook sarà ancora visualizzare

line1 
line 2 
line 3 

Cosa devo fare per fare in modo che l'outlook mostri il messaggio con il ne corretto informazioni sulla linea?

risposta

14

Outlook a volte rimuove i newline (di solito viene visualizzato un commento che ha eseguito anche esso), non è sicuro esattamente delle regole per quando lo fa ma sono abbastanza sicuro se aggiungete un . (punto) alla fine di ogni riga non li rimuoverà.

In realtà, guardando a questo articolo sembra che si può anche risolvere inviando le e-mail in formato HTML o RTF: Line breaks are removed in posts made in plain text format in Outlook

+0

Grazie! Funziona ora. –

+0

Ma perché perché perché, Outlook tenta di rimuovere interruzione di riga in formato testo di default è oltre me! –

+0

@pstar: Penso che sia per contrastare i problemi con linewrapping. Come se tu mi inviassi una mail di 80 caratteri e ho la stessa impostazione + che dovrebbe prefixare la risposta con '>' la mia risposta avvolgerebbe nuovamente le tue righe in modo che il tuo testo originale risultasse piuttosto brutto. –

0

Impostare l'IsBodyHTML su false:

ms.IsBodyHtml = false;

Di default è falso ma sembra che tu l'abbia impostato su true da qualche parte in quanto outlook pensa che sia HTML.

+0

Non provato a installare o esplicitamente impostare IsBodyHtml su false, non sembra lavorare in entrambi i casi. –

2

avere la vostra stringa come di seguito

"Your string.\n" 

E:

ms.IsBodyHtml = false; 

Ma lo si può ottenere nella cartella Junk

1

Outlook sarà sempre rimuovere le interruzioni di linea, tuttavia, ciò che può essere utilizzato è il seguente:

Invece di utilizzare: It vironment.Newline o n \ r \

Si dovrebbe usare stringa MyString + = "questo è il mio testo" + "% 0d% 0A"

Questo 0d% 0A% sarà riconosciuto da Outlook come la sequenza di escape per una nuova riga.

+0

Che non ha funzionato. – eaglei22

+0

Vero - Ciò usata per funzionare ma ora questo invia un messaggio con le interruzioni di riga mancante. In Outlook è necessario fare clic sul banner in alto nel messaggio e selezionare ripristinare le interruzioni di riga. Non ho nessuna soluzione al momento – XikiryoX

+0

Ah okay. Grazie per il feedback. Vedere la mia risposta sotto per quello che ho finito per farlo funzionare con Outlook 2013. – eaglei22

3

questo ha lavorato per me

mMailMessage.IsBodyHtml = true; 
Literal1.Text = "Dear Admin, <br/>You have recieved an enquiry onyour Website. Following are the details of enquiry:<br/><br/>Name: " + TextBox2.Text + "<br/>Address: " + TextBox3.Text + ", " + TextBox4.Text + "<br/>Phone: " + TextBox5.Text + "<br/>Email: " + TextBox2.Text + "<br/>Query: " + TextBox6.Text+"<br/> Regards, <br/> Veritas Team"; 
mMailMessage.Body = Literal1.Text; 
+0

Aggiungere "
" ha funzionato per me. Per lo sfondo, stavo prendendo un valore di cella che contiene il testo del corpo dell'e-mail e sostituendo Chr (10) con "
" affinché il corpo dell'email di progetto di Outlook venga pubblicato correttamente. – Vamsi

0

Questo ha funzionato per me:

mail.Body = String.Format(@"Some text here: 
A new line here 
And another line here"); 

Basta essere attenti a non trattino il 2 ° e 3 ° linea.

0

sono riuscito a farlo funzionare con l'aggiunta di alcuni spazi stringa alla fine della linea prima della linea di travagliata.

msg.Append("\n some Message" + " "); 
msg.Append("\n another message"); 
1

// il corpo e-mail dovrebbe essere HTML // sostituisce i caratteri di nuova riga \ n \ r con il codice HTML pausa

mailMsg.IsBodyHtml = true; 
mailMsg.Body = this.Body; 
mailMsg.BodyEncoding = System.Text.Encoding.ASCII; 
mailMsg.Body = mailMsg.Body.Replace(Environment.NewLine, "<br/>"); 
0

Necro ansering una domanda, ma potrebbe rivelarsi utile per alcuni anche.

msg.IsBodyHtml = true; 
AlternateView av = AlternateView.CreateAlternateViewFromString(msg.Body, new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Html)); 
av.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; 
msg.AlternateViews.Add(av); 
AlternateView avPlain = AlternateView.CreateAlternateViewFromString(msg.Body, new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Plain)); 
avPlain.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; 
msg.AlternateViews.Add(avPlain); 
0

Prova utilizzando l'operatore testualmente "@" prima del tuo messaggio:

message.Body = 
@" 
line1 
line 2 
line 3 
" 

Si consideri che anche la distanza del testo dal margine sinistro influisce sulla reale sistance dal margine corpo del messaggio lasciato ..

Problemi correlati