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?

Foi útil?

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.

enter descrição da imagem aqui

enter descrição da imagem aqui

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top