Outlook pulisce automaticamente le interruzioni di riga e rovina il formato della posta elettronica

StackOverflow https://stackoverflow.com/questions/247546

  •  05-07-2019
  •  | 
  •  

Domanda

Sto inviando un'e-mail utilizzando il framework dotnet.Ecco il modello che sto utilizzando per creare il messaggio:

Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%

Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For:  %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%

Quando il messaggio viene ricevuto in Outlook, Outlook mi dice "Le interruzioni di riga aggiuntive in questo messaggio sono state rimosse".E il messaggio viene visualizzato in questo modo:

Date of Hire: 9/28/2001
Annual Salary: $100,000
Reason for Request: New Hire

Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For:  $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000

Nota come Outlook rimuove erroneamente le interruzioni di riga necessarie dopo il nome, EECoverageAmount, ecc...

È importante che i destinatari dell'e-mail ricevano un'e-mail formattata correttamente e devo presumere che alcuni di loro utilizzino Outlook 2003.Inoltre, non posso presumere che ne sappiano abbastanza per disattivare la funzione di pulizia automatica per formattare correttamente il messaggio.

Ho visualizzato questi messaggi in altri client di posta e vengono visualizzati correttamente

qualche informazione in più:

  • Sto utilizzando UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Il messaggio msg.Body viene letto da un file di testo con codifica UTF-8 e ogni riga termina con un crlf.

Domanda:Come posso modificare il formato del messaggio per evitare questo problema?

È stato utile?

Soluzione

Inizia ogni riga con 2 spazi e la prospettiva sarà " ingannato " nel mantenere la tua formattazione.

Quindi cambia

Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%

Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For:  %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%

a

  Date of Hire: %HireDate%
  Annual Salary: %AnnualIncome%
  Reason for Request: %ReasonForRequest%

  Name of Voluntary Employee: %FirstName% %LastName%
  Total Coverage Applied For:  %EECoverageAmount%
  Guaranteed Coverage Portion: %GICoveragePortion%
  Amount Subject to Medical Evident: %GIOverage%
^^ <--- Two extra spaces at the start of every line

Ecco qui il

Altri suggerimenti

Puoi anche inserire un carattere di tabulazione alla fine della riga (appena prima del CR LF). Questo spazio bianco aggiuntivo sarà alla fine della linea e quindi non visibile all'utente. Potresti preferire questo a dover inserire spazi a sinistra. Nota che un singolo spazio non è sufficiente (anche se forse più spazi potrebbero aiutare, non lo so.)

Questa risposta è su come " disabilitare " la funzionalità dal client Outlook.

  • Vai a Strumenti - > " Opzioni ... "
  • Nel " Preferenze " scheda fare clic su " Opzioni email ... "
  • Deseleziona la casella " Rimuovi le interruzioni di riga in più nei messaggi di testo normale. "
  • Premi OK

Cordiali saluti: sto usando Outlook 2007

Ho sempre avuto più fortuna a formattare le e-mail come html. Potresti avere ancora il problema per l'utente finale di dover impostare il client per consentire il formato html, ma di solito hanno più familiarità con questo dal momento che così tante e-mail arrivano in formato html. Hai anche un po 'più di lavoro da aggiungere aggiungendo i tag html, ma il risultato finale è molto più controllabile.

@ephemient suggerisce anche: Invia sia in HTML che in testo normale. I buoni clienti mostreranno il secondo, Outlook mostrerà il primo, tutti sono felici (tranne il programmatore che deve fare più lavoro).

Aggiunta di " \ t \ r \ n " (\ t per TAB) invece di " \ r \ n " ha funzionato per me su Outlook 2010.

Espandere la Doug L , poiché penso che la messaggistica HTML sia ancora più onnipresente e accettata ora che in 2008 quando è stata pubblicata la risposta. Ecco un piccolo frammento di c # per aiutare a convertire il corpo e inviare il messaggio in formato HTML:

body = string.Format("<font face='calibri,arial,sans-serif'>{0}<font/>", body.Replace("\r\n", "<br>"));

using (var smtpClient = new SmtpClient() { Host = smtpHost })
using (var msg = new MailMessage(from, emailDistribution, subject, body) { IsBodyHtml = true })
     smtpClient.Send(msg);

Riscontro lo stesso problema quando si genera un messaggio di posta elettronica in chiaro e poi lo si legge con Outlook 2003 SP3. Sembra che tu possa evitare il processo di rimozione mantenendo la lunghezza della linea inferiore a 40 caratteri. Potrebbe non essere sempre pratico.

Inserisci il testo <pre> I tag e Outlook formatteranno e visualizzeranno il testo correttamente.

l'ho definito in CSS inline nel corpo HTML come:

CSS:

pre {
 font-family: Verdana, Geneva, sans-serif;
}

ho definito la famiglia di caratteri in modo che debba essere impostato il carattere.

HTML:

<td width="70%"><pre>Entry Date/Time:       2013-09-19 17:06:25
Entered By:     Chris

worklog mania

____________________________________________________________________________________________________

Entry Date/Time:        2013-09-19 17:05:42
Entered By:     Chris

this is a new Worklog Entry</pre></td>

La pulizia automatica è una funzione di Outlook che rimuove le interruzioni di riga aggiuntive. Puoi prevenirlo in due modi.

  • Il primo modo è aggiungere almeno 2 spazi extra prima delle righe durante l'invio dell'email tramite il codice. Puoi aggiungere questi spazi extra solo prima di quelle righe che Outlook rimuove automaticamente.

  • Il secondo modo è di modificare le impostazioni di Outlook che impediranno l'outlook dalla rimozione di interruzioni di riga extra.

 inserisci qui la descrizione dell'immagine

 inserisci qui la descrizione dell'immagine

Il mio testo include '\ r \ n' ma Outlook 2010 non visualizza l'interruzione di riga. Crea token di linee delimitate da '\ r \ n' e token di busta dai tag di paragrafo HTML. Il mio formato e-mail è HTML. Sto generando HTML Body per la mia e-mail nel codice seguente.

string[] tokens = Regex.Split(objTickt.Description, "\r\n");
  if (tokens.Length > 0)
  {
     foreach (string line in tokens)
     {
         //htmlTW.WriteEncodedText(objTickt.Description.Replace("\r\n", "\n\n"));
         htmlTW.RenderBeginTag(HtmlTextWriterTag.P);
         htmlTW.WriteEncodedText(line);
         htmlTW.RenderEndTag();
     }
  }

Cambia la terminazione della linea da crlf a cr o lf.

Sospetto che la parte superiore dell'e-mail utilizzi solo cr (o lf) e Outlook si aspetta che il resto dell'e-mail segua lo stesso formato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top