Outlook autocleaning meus quebras de linha e estragar o meu formato de e-mail
Pergunta
Estou enviando um e-mail utilizando o framework dotnet. Aqui é o modelo que eu estou usando para criar a mensagem:
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 as mensagens são recebidos no Outlook, Outlook me diz "quebras de linha extra nesta mensagem foram removidos". E a mensagem é exibida como esta:
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
Note como o Outlook incorretamente remove quebras de linha necessário após o nome, EECoverageAmount, etc ...
É importante para os recepients e-mail para obter um e-mail corretamente formatado, e eu tenho que assumir que alguns deles usam o Outlook 2003. Também não posso supor que eles vão saber o suficiente para desligamento o recurso autoclean para passar a mensagem para o formato devidamente.
Eu tenho visto essas mensagens em outros clientes de email e eles são exibidos corretamente
Alguns mais informações:
- Eu estou usando UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
- O msg.Body está a ser lido a partir de um arquivo de texto codificado UTF-8, e cada linha é encerrado com um CRLF.
Pergunta: Como faço para alterar o formato da mensagem para evitar este problema?
Solução
Comece cada linha com 2 lugares e perspectivas serão "enganado" para manter sua formatação.
mudar Então
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%
para
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
Aqui está a artigo eu encontrei quando pesquisando esse problema que vai para um pouco mais profundidade do que a minha resposta.
Outras dicas
Você também pode inserir um caractere de tabulação no final da linha (pouco antes da CR LF). Este espaço em branco extra será no fim da linha e, portanto, não visível ao utilizador. Você pode preferir este a ter de inserir espaços à esquerda. Note-se que um único espaço não é suficiente (embora talvez vários espaços iria ajudar, eu não sei.)
Esta resposta é sobre a forma de "desativar" o recurso do cliente Outlook.
- Vá para Ferramentas -> "Opções ..."
- Na guia "Preferências", clique em "Opções de email ..."
- Desmarque a caixa "Remover quebras de linha extras em mensagens de texto simples."
- Clique em OK
FYI: Eu estou usando o Outlook 2007
Sempre tive melhor formatação e-mails como HTML sorte. Você ainda pode ter a questão do usuário final de ter que definir o cliente para permitir html formato, mas eles geralmente são mais familiarizados com isso desde que tantos e-mails vêm html formatado. Você também tem um pouco mais de trabalho em sua extremidade adicionando as tags HTML, mas o resultado final é muito mais controlável.
@ephemient também sugere: Enviar como HTML e texto simples. Bons clientes mostrará o último, Outlook irá mostrar o primeiro, todo mundo está feliz (exceto o programador que tem que fazer mais trabalho).
Como adicionar "\ t \ r \ n" (\ t para TAB) em vez de "\ r \ n" trabalhou para mim em Outlook 2010.
Expandindo a Doug L resposta, desde que eu acho HTML mensagens é ainda mais onipresente e aceito agora do que em 2008, quando a resposta foi postada. Aqui é um pouco c # snippet para ajudar a converter o corpo e enviar a mensagem em 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);
Eu estou vendo o mesmo problema ao gerar um e-mail de texto simples e, em seguida, lê-lo com o Outlook 2003 SP3. Parece que você pode evitar o processo de remoção por ela por manter o comprimento da linha de menos de 40 caracteres. Pode não ser sempre prático.
Coloque o texto na <pre>
Etiquetas e perspectivas irá formatar e exibir o texto corretamente.
i definiu no CSS inline no corpo HTML como:
CSS:
pre {
font-family: Verdana, Geneva, sans-serif;
}
i definiu o font-family ter de conjunto de fontes.
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>
limpeza automática é um recurso do Outlook que remove quebras de linha extra. Você pode impedi-lo de duas maneiras.
-
Primeira maneira é adicionar pelo menos 2 espaços extras antes de linhas ao enviar o e-mail através de código. Você pode adicionar esses espaços extras só perante as linhas que Outlook remove automaticamente.
-
A segunda maneira é a configuração mudança outlook que impedirá outlook de remover quebras de linha extras.
O meu texto inclui '\ r \ n', mas não Outlook 2010 não processar quebra de linha. Criar símbolos de linhas delimitadas por '\ r \ n' e fichas envelope por tags de parágrafo HTML. Meu formato de email é HTML. Eu estou gerando HTML corpo para o meu e-mail no código abaixo.
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();
}
}
Mude sua terminação de linha de crlf a qualquer cr ou LF.
Eu suspeito que a parte superior dos usos e-mail única cr (ou lf), e Outlook espera que o resto do e-mail a seguir o mesmo formato.