Outlook autocleaning my line breaks and screwing up my email format

65,892

Solution 1

Start every line with 2 spaces and outlook will be "tricked" into keeping your formatting.

So change

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%

to

  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

Here is the article I found when researching this problem which goes into a little more depth than my answer.

Solution 2

You can also insert a tab character at the end of the line (just before the CR LF). This extra white space will be at the end of the line and hence not visible to user. You might prefer this to having to insert spaces on the left. Note that a single space is not enough (though perhaps multiple spaces would help, I don't know.)

Solution 3

This answer is on how to "disable" the feature from the Outlook Client.

  • Go to Tools -> "Options ..."
  • In the "Preferences" tab click on "Email Options ..."
  • Uncheck the box "Remove extra line breaks in plain text messages."
  • Hit OK

FYI:I am using Outlook 2007

Solution 4

Adding "\t\r\n" ( \t for TAB) instead of "\r\n" worked for me on Outlook 2010.

Solution 5

I have always had better luck formatting e-mails as html. You may still have the end-user issue of having to set the client to allow html format, but they are usually more familiar with this since so many e-mails do come html formatted. You also have a little more work on your end adding the html tags, but the end result is much more controllable.

@ephemient also suggests: Send as both HTML and plaintext. Good clients will show the latter, Outlook will show the former, everybody is happy (except the programmer who has to do more work).

Share:
65,892
Aheho
Author by

Aheho

I have experience with asp.net, delphi, MS-Sql Server, and Visual Basic v6.

Updated on March 16, 2020

Comments

  • Aheho
    Aheho about 4 years

    I'm sending an email using the dotnet framework. Here is the template that I'm using to create the message:

    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%
    

    When the messages is received in outlook, outlook tells me "Extra line breaks in this message were removed". And the message displays like this:

    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 how Outlook incorrectly removes needed line breaks after the name, EECoverageAmount, etc...

    It's important for the email recepients to get a correctly formatted email, and I have to assume that some of them use outlook 2003. I also can't assume they will know enough to shutoff the autoclean feature to get the message to format properly.

    I have viewed these messages in other mail clients and they display correctly

    some more information:

    • I am using UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
    • The msg.Body is being read from a UTF-8 encoded text file, and each line is terminated with a crlf.

    Question: How do I change the format of the message to avoid this problem?

  • ephemient
    ephemient over 15 years
    BTW, s/http/html/g in your answer.
  • Daniel Cassidy
    Daniel Cassidy over 15 years
    Doubtful. Outlook has a highly dubious feature which tries to convert mail with hard line breaks into flowed text. Unsurprisingly, it frequently gets this wrong, as in this case.
  • jdfhf
    jdfhf about 14 years
    I don't like this feature, either. Among other things, it causes code in emails to be broken and PGP signature checks to fail.
  • Wilfred Knievel
    Wilfred Knievel over 13 years
    Here's a handy Regex to sort this out: Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
  • Wilfred Knievel
    Wilfred Knievel over 13 years
    Ok, in that regex there are two spaces but this being html it's only displaying one!
  • Wilfred Knievel
    Wilfred Knievel over 13 years
    Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
  • Peter Ford
    Peter Ford almost 11 years
    And in Outlook 2010 it's: File > Options > Mail > Scroll down to the "Message format" section > Untick the "Remove extra line breaks in plain text messages" box.
  • sfarbota
    sfarbota almost 11 years
    Perfect solution for emails sent from Trac to Outlook users.
  • Tobias
    Tobias almost 9 years
    This is a client-side solution. Much better would be a reliable method to prevent Outlook to doing this on the server side, i.e. by formatting the mail in a way that doesn't disturb other clients (because you don't know which mail client the receiver will use).
  • Salvador Valencia
    Salvador Valencia over 8 years
    For code generated plain text emails this is the best solution.
  • Chris Peters
    Chris Peters almost 8 years
    I believe the original question refers to plaintext emails, not HTML. You're trying to mix in HTML as the solution.
  • Muleskinner
    Muleskinner about 7 years
    Thanks - and now please guide our 100.000+ newsletter receivers to do this
  • Ryan VandenHeuvel
    Ryan VandenHeuvel over 6 years
    +1 I had to use 3 spaces instead of a tab, but basically this fix worked for me: Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", " ", RegexOptions.Multiline)
  • user2864740
    user2864740 about 6 years
    I "solved" this using "\r\n " (two spaces, no tab) after the newline as a similar hack. Works In Outlook 2016. YMMV.
  • C4pt4inC4nn4bis
    C4pt4inC4nn4bis over 5 years
    confirmed! Here regex as php snippet: $re = '/(?<!\t)((?<!\r)(?=\n)|(?=\r\n))/m'; $subst = " "; $MailText = preg_replace($re, $subst, $MailText);
  • C4pt4inC4nn4bis
    C4pt4inC4nn4bis over 5 years
    Works for Outlook but breaks text mails on samsungs mail client fpr smartphones :(
  • it3xl
    it3xl over 3 years
    Spaces sucks. The tabulation does rule. Thanks :)
  • Chris Dodd
    Chris Dodd about 2 years
    Unfortunately it doesn't work -- lines still get mashed together.