2008-10-29 11 views
97

Enviaré un correo electrónico utilizando el marco de dotnet. Esta es la plantilla que estoy usando para crear el mensaje:Outlook autocleaning mis saltos de línea y atornillar mi formato de correo electrónico

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% 

Cuando se reciben los mensajes en Outlook, Outlook me dice que "se eliminaron los saltos de línea adicionales en este mensaje". Y el mensaje se muestra así:

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 cómo Outlook quita incorrectamente los saltos de línea necesarios después del nombre, EECoverageAmount, etc ...

Es importante para los recepients correo electrónico para conseguir un correo electrónico con el formato correcto, y Tengo que suponer que algunos de ellos usan Outlook 2003. Tampoco puedo suponer que sabrán lo suficiente como para desconectar la función de limpieza automática para que el mensaje se formatee adecuadamente.

he visto estos mensajes en otros clientes de correo y se mostrarán correctamente

algo más de información:

  • estoy usando UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • El msg.Body se lee de un archivo de texto codificado en UTF-8 y cada línea termina con un crlf.

Pregunta: ¿Cómo cambio el formato del mensaje para evitar este problema?

+8

Aunque ambas respuestas altamente upvoted siguientes son correctas, ver [esta respuesta] (http://stackoverflow.com/a/ 1638608/298754) para obtener una lista de todas las reglas. – Bobson

+1

posible duplicado de [¿Cómo formateo una cadena en un correo electrónico para que Outlook imprima los saltos de línea?] (Http://stackoverflow.com/questions/136052/how-do-i-format-a-string-in- an-email-so-outlook-will-print-the-line-breaks) – fvu

+2

¿Por qué esta "característica" existe? – chiliNUT

Respuesta

85

Comience cada línea con 2 espacios y las perspectivas serán "engañadas" para mantener su formateo.

lo que el cambio

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 

Aquí está el article encontré cuando la investigación de este problema que va en un poco más de profundidad que mi respuesta.

+6

Aquí hay una útil Regex para resolver esto: 'Regex.Replace (messageBody, @"^(?! \ S \ s) "," ", RegexOptions.Multiline); ' –

+2

Ok, en esa expresión existen dos espacios, ¡pero esto es html y solo muestra uno! –

+0

Para los correos electrónicos de texto sin formato generados por código, esta es la mejor solución. –

-6

Cambie la terminación de línea de crlf a cr o lf.

Sospecho que la parte superior del correo electrónico solo usa cr (o lf), y Outlook espera que el resto del correo electrónico siga el mismo formato.

+0

Traté de cambiar el terminador de línea a un CR. Eso no funcionó. Luego traté de cambiarlo a un LF. Eso tampoco funcionó. – Aheho

+1

Dudoso. Outlook tiene una característica muy dudosa que intenta convertir el correo con saltos de línea dura en texto fluido. Como era de esperar, con frecuencia se equivoca, como en este caso. –

4

Siempre he tenido mejores suerte en el formato de correos electrónicos como html. Aún puede tener el problema del usuario final de tener que configurar el cliente para que permita el formato html, pero generalmente están más familiarizados con esto, ya que muchos correos electrónicos tienen formato html. También tiene un poco más de trabajo al agregar las etiquetas html, pero el resultado final es mucho más controlable.

@ephemient también sugiere: Enviar como HTML y texto plano. Los buenos clientes mostrarán lo último, Outlook mostrará lo primero, todos estarán contentos (excepto el programador que debe hacer más trabajo).

+0

Enviar como HTML y texto sin formato. Los buenos clientes mostrarán lo último, Outlook mostrará lo primero, todos estarán contentos (excepto el programador que debe hacer más trabajo). – ephemient

+0

BTW, s/http/html/g en su respuesta. – ephemient

0

Estoy viendo el mismo problema al generar un correo electrónico de texto plano y luego leerlo con Outlook 2003 SP3. Parece que puede evitar el proceso de eliminación manteniendo la longitud de la línea por debajo de 40 caracteres. Puede que no siempre sea práctico.

112

También puede insertar un carácter de tabulación en el extremo de la línea (justo antes del CR LF). Este espacio en blanco adicional estará al final de la línea y, por lo tanto, no será visible para el usuario. Puede preferir tener que insertar espacios a la izquierda. Tenga en cuenta que un solo espacio no es suficiente (aunque quizás haya varios espacios que ayuden, no sé).

+13

'Regex.Replace (messageBody, @" (?

+0

esto funciona muy bien para outlook – Gordon

+0

Solución perfecta para correos electrónicos enviados desde Trac a usuarios de Outlook. – sfarbota

26

Esta respuesta se trata de cómo "desactivar" la característica del cliente de Outlook.

  • Vaya a Herramientas -> "Opciones ..."
  • En la opción "Preferencias", haga clic en "Opciones de correo electrónico ..."
  • Desactive la casilla "Eliminar saltos de línea adicionales en mensajes de texto sin formato "
  • Hit OK

FYI: Estoy utilizando Outlook 2007

+2

Tampoco me gusta esta característica. Entre otras cosas, hace que el código en los correos electrónicos se rompa y las comprobaciones de firma de PGP fallen. –

+6

Y en Outlook 2010 es: Archivo> Opciones> Correo> Desplácese hasta la sección "Formato de mensaje"> Desmarque la casilla "Eliminar saltos de línea adicionales en mensajes de texto sin formato". –

+1

Esta es una solución del lado del cliente. Mucho mejor sería un método confiable para evitar que Outlook haga esto por el lado del servidor, es decir formateando el correo de una manera que no moleste a otros clientes (porque no sabe qué cliente de correo usará el receptor). – Tobias

0

Poner el texto en las etiquetas y las perspectivas <pre> dará formato y mostrar el texto correctamente.

he definido en CSS en línea en HTML del cuerpo como:

CSS:

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

i definida la fuente de la familia tenga que configurar la fuente.

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> 
+1

Creo que la pregunta original se refiere a correos electrónicos de texto plano, no a HTML. Está intentando mezclar en HTML como solución. –

-1

Mi texto incluye '\ r \ n', pero Outlook 2010 no hace salto de línea. Cree tokens de líneas delimitadas por '\ r \ n' y tokens de envolvente mediante etiquetas HTML Paragraph. Mi formato de correo electrónico es HTML. Estoy generando HTML Body para mi correo electrónico en el siguiente código.

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(); 
    } 
    } 
1

Adición "\ t \ r \ n" (\ t para TAB) en lugar de "\ r \ n" trabajó para mí en Outlook 2010.

+0

"resolví" esto usando '" \ r \ n "' (dos espacios, sin tabulación) después de la línea nueva como un truco similar. Funciona en Outlook 2016. YMMV. – user2864740

1

Ampliando la respuesta Doug L, ya que creo La mensajería HTML es aún más omnipresente y ahora más aceptada que en 2008 cuando se publicó esa respuesta. Aquí hay un pequeño fragmento de código C# para ayudar a convertir el cuerpo y enviar el mensaje en 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); 
Cuestiones relacionadas