Estou enviando um e-mail usando o framework dotnet. Aqui está o modelo que 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 recebidas no Outlook, o Outlook me diz "quebras de linha extras nesta mensagem foram removidas". E a mensagem é exibida assim:
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
Observe como o Outlook remove incorretamente as quebras de linha necessárias após o nome, EECoverageAmount, etc ...
É importante que os destinatários do e-mail obtenham um e-mail formatado corretamente e devo presumir que alguns deles usam o outlook 2003. Também não posso supor que eles saibam o suficiente para desligar o recurso autoclean e fazer com que a mensagem seja formatada corretamente.
Eu vi essas mensagens em outros clientes de e-mail e elas são exibidas corretamente
mais algumas informações:
- Estou usando UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
- O msg.Body está sendo lido de um arquivo de texto codificado em UTF-8 e cada linha é encerrada com um crlf.
Pergunta: Como mudo o formato da mensagem para evitar este problema?
\r\n
. Funcionou para mimRespostas:
Comece cada linha com 2 espaços e o Outlook será "enganado" para manter sua formatação.
Então mude
para
Aqui está o artigo que encontrei ao pesquisar esse problema, que é um pouco mais aprofundado do que minha resposta.
fonte
Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Você também pode inserir um caractere de tabulação no final da linha (logo antes do CR LF). Este espaço em branco extra estará no final da linha e, portanto, não visível para o usuário. Você pode preferir isso a inserir espaços à esquerda. Observe que um único espaço não é suficiente (embora talvez vários espaços ajudem, não sei.)
fonte
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
Esta resposta é sobre como "desabilitar" o recurso do Outlook Client.
Para sua informação: Estou usando o Outlook 2007
fonte
Sempre tive mais sorte formatando e-mails como html. Você ainda pode ter o problema do usuário final de ter que configurar o cliente para permitir o formato html, mas eles geralmente estão mais familiarizados com isso, já que muitos e-mails vêm formatados em html. Você também tem um pouco mais de trabalho adicionando as tags html, mas o resultado final é muito mais controlável.
@ephemient também sugere: Envie como HTML e texto simples. Bons clientes mostrarão o último, o Outlook mostrará o primeiro, todos estão felizes (exceto o programador que tem que fazer mais trabalho).
fonte
Adicionar "\ t \ r \ n" (\ t para TAB) em vez de "\ r \ n" funcionou para mim no Outlook 2010.
fonte
"\r\n "
(dois espaços, sem tabulação) após a nova linha como um hack semelhante. Funciona no Outlook 2016. YMMV.Expandindo a resposta Doug L , já que acho que as mensagens HTML são ainda mais onipresentes e aceitas agora do que em 2008, quando essa resposta foi postada. Aqui está um pequeno snippet c # para ajudar a converter o corpo e enviar a mensagem no formato HTML:
fonte
Estou tendo o mesmo problema ao gerar um e-mail de texto sem formatação e, em seguida, lê-lo com o Outlook 2003 SP3. Parece que você pode evitar o processo de remoção mantendo o comprimento da linha abaixo de 40 caracteres. Nem sempre pode ser prático.
fonte
Coloque o texto em
<pre>
Tags e o Outlook irá formatar e exibir o texto corretamente.Eu o defini em CSS inline no HTML Body como:
CSS:
Eu defini a família de fontes para ter um conjunto de fontes.
HTML:
fonte
A limpeza automática é um recurso do Outlook que remove quebras de linha extras. Você pode evitá-lo de duas maneiras.
A primeira maneira é adicionar pelo menos 2 espaços extras antes das linhas ao enviar o e-mail por meio do código. Você pode adicionar esses espaços extras apenas antes das linhas que o Outlook remove automaticamente.
A segunda maneira é alterar a configuração do outlook, o que impedirá o outlook de remover quebras de linha extras.
fonte
Meu texto inclui '\ r \ n', mas o Outlook 2010 não processa a quebra de linha. Crie tokens de linhas delimitadas por '\ r \ n' e tokens de envelope por tags de parágrafo HTML. O formato do meu email é HTML. Estou gerando corpo em HTML para meu e-mail no código abaixo.
fonte
Altere a terminação da linha de crlf para cr ou lf.
Suspeito que a parte superior do e-mail usa apenas cr (ou lf), e o Outlook espera que o restante do e-mail siga o mesmo formato.
fonte