Support » Plugin: Subscribe2 - Form, Email Subscribers & Newsletters » extra line breaks every line

  • Extra carriage return characters are added every line to plain text emails sent to subscribers. HTML emails format fine.

    Here is the source code (via my mail client) from one paragraph of an example email:

    I recently came across a document that perfectly illustrates this last poin=
    t: a=0D
    power point presentation by a senior Federal Reserve Bank research economis=
    t,=0D
    given at a conference aimed at school teachers specializing in economics.=
    =0D
    =0D

    That paragraph formats in my mail client like this:

    I recently came across a document that perfectly illustrates this last point: a

    power point presentation by a senior Federal Reserve Bank research economist,

    given at a conference aimed at school teachers specializing in economics.

    The =0D is the quoted-printable mime for a carriage return character, which is interpreted by all mail clients (in conjunction with the new lines) as double line breaks.

    I have a WordPress plugin that sends these emails through SMTP. To check whether this was a problem with that plugin rather than Subscribe2, I tried 3 different SMTP plugins (Easy WP SMTP, WP SMTP, and WP-Mail-SMTP — each of which have a userbase over 40,000). All had the above error, none had this issue in their support forums. The error seems to be unique to Subscribe2.

    I use SendGrid as my SMTP server. I thought the issue could be with them, but I already fixed the “Don’t convert plain text emails to HTML” setting there.

    https://support.sendgrid.com/hc/en-us/articles/200181418-Plain-text-emails-converted-to-HTML

    https://wordpress.org/plugins/subscribe2/

Viewing 15 replies - 1 through 15 (of 20 total)
  • Plugin Support mattyrob

    (@mattyrob)

    @chuck Moulton

    This may be due to a bug in the WordPress wp_mail function. See here:
    https://wordpress.org/support/topic/bug-with-long-header-value-from?replies=10

    And also the bug report and proposed patch here:
    https://core.trac.wordpress.org/ticket/28473

    @mattyrob

    The links you provide refer to a header problem. My headers are fine and the emails are delivered. The problem I outlined is in the body of the emails.

    Plugin Support mattyrob

    (@mattyrob)

    @chuck Moulton

    Apologies, early morning brain needed to thaw out.

    Subscribe2 uses the wp_mail() function and this is a wrapper for PHPMailer. By default content transfer encoding is 8bit in PHPMailer so something is changing that – perhaps non-ASCII characters in your email body.

    That is then triggering further encoding functions in PHPMailer and I suspect it is that part of the code that is creating issues in your plain text emails. HTML will be fine as line breaks are ignored unless they are HTML tags.

    Not sure how that can be fixed as yet. I’ll keep looking.

    @chuck Moulton there’s a way to narrow down the issue to Subscribe2 or PHPMailer. Try this plugin, which replaces PHPMailer with the Zend Mail framework:
    https://wordpress.org/plugins/postman-smtp/

    The three plugins you listed – Easy WP SMTP, WP SMTP, and WP-Mail-SMTP – are essentially identical, configuring PHPMailer with your own settings.

    @jasonhendriks

    Thanks for the suggestion. I will test that out and report back here. However, I prefer to run tests late at night when there is minimal impact on my site, so it will probably be another 12 hours.

    @jasonhendriks

    I tried the postman-smtp plugin. The behavior is different from other SMTP plugins, but still not quite right.

    Previously, plaintext emails would have line breaks inserted into paragraphs and every line break would become a double line break. Now rouge line breaks are no longer inserted into the middle of paragraphs. However, legitimate line breaks (between paragraphs) all still become double line breaks.

    With postman-smtp (message source in mail client):

    [1] The Major-General=E2=80=99s song, from Gilbert and Sullivan=E2=80=99s P=
    irates of
    Penzanse.=0D
    =0D
    [2] And hyperinflation.=0D
    =0D
    [3] For a discussion of some of these determinants see chapter 2 of Lawrence
    White=E2=80=99s The Theory of Monetary Instututions (London: Blackwell, 199=
    9).=0D
    =0D
    [4] Most historical bank runs have been informed by prior information sugge=
    sting
    that the afflicted institutions might be insolvent.=0D
    =0D
    [5] As they never refer to the bank run depicted in it, I suppose that Fed
    experts consider Mary Poppins to offer insufficiently =E2=80=9Crigorous=E2=
    =80=9D evidence of
    how and why runs happen.

    With Easy WP SMTP, WP SMTP, and WP-Mail-SMTP (message source in mail client):

    [1] The Major-General=E2=80=99s song, from Gilbert and Sullivan=E2=80=99s P=
    irates of=0D
    Penzanse.=0D
    =0D
    [2] And hyperinflation.=0D
    =0D
    [3] For a discussion of some of these determinants see chapter 2 of Lawrenc=
    e=0D
    White=E2=80=99s The Theory of Monetary Instututions (London: Blackwell, 199=
    9).=0D
    =0D
    [4] Most historical bank runs have been informed by prior information sugge=
    sting=0D
    that the afflicted institutions might be insolvent.=0D
    =0D
    [5] As they never refer to the bank run depicted in it, I suppose that Fed=
    =0D
    experts consider Mary Poppins to offer insufficiently =E2=80=9Crigorous=E2=
    =80=9D evidence of=0D
    how and why runs happen.=0D
    =0D

    I think this may be the problem for the remaining extra line breaks:
    https://support.sendgrid.com/hc/en-us/articles/200182068-HTML-Formatting-Issues

    4. Some mail clients, such as Outlook and Thunderbird, appear to insert double spacing line breaks at every line. The reason is that the ‘content-transfer-encoding’ in MIME is set to ‘quoted-printable’ which adds Carriage Return Line Feed (CRLF) line breaks to the source content of the email which are characters interpreted by these mail clients. To alleviate this problem, please do the following:

    a. If you can customize the MIME settings for your email, set the ‘Content-Transfer-Encoding’ to ‘7bit’ instead of ‘Quoted-Printable.’

    Is there a way to not send quoted-printable emails?

    Plugin Support mattyrob

    (@mattyrob)

    @@Chuck Moulton

    Hmm, a little more digging and I’ve found a reported bug in PHPMailer:
    https://github.com/PHPMailer/PHPMailer/issues/219

    This seems to have been fixed in version 5.2.8 but WordPress is still using 5.2.7.

    In the meantime we could try hacking PHPMailer to force 8bit encoding.

    add_action( 'phpmailer_init', '8bit_transfer_encoding' );
    function 8bit_transfer_encoding( $phpmailer ) {
        $phpmailer->Encoding = '8bit';
    }

    Chuck, would you send me the entire failed email, or the session transcript from the Postman log (provided it is the entire thing start to finish). I’d like to take a look at this message, including the headers.

    @jasonhendriks

    Yes, I will forward you emails now. However, I wouldn’t call these “failed” emails; they were delivered, just with line break errors.

    Semantics 😉

    Hi Chuck, I got your email. I think it’s pretty obvious what’s going on now. You are correct, it is related to quoted-printable.

    First a little background on character encoding. I see problems like this all the time at work, usually when a business user has typed a piece of text into a Microsoft Word document and a developer has copied and pasted that text directly into their code. If you’ve ever used Word, I’m sure you’ve noticed it automatically replaces quotes ” with an inward-facing start quote and outward-facing end quote – neither of which are ASCII characters. This usually appears in a web browser as a square box instead of the appropriate character, especially in non-IE browsers.

    Quoted printable allows non-ascii characters to be sent over email. For example, your text: General=E2=80=99s song has encoded an apostrophe-like character as =E2=80=99. If the original text had been written using the ASCII apostrophe character ‘ instead of the high-bit version, no encoding would have taken place.

    Similarly, in the email you sent me, =C2=A0 appears everywhere. This is the encoding for non-breaking space.

    None of these things are particularly wrong, there’s no reason you can’t use non-ASCII characters in your post 💻✅👍. After all, the email and WordPress are set to use UTF-8, an encoding that theoretically works with every character conceived.

    The problem is here :

    However, legitimate line breaks (between paragraphs) all still become double line breaks.

    Again, the =0D encoded characters all over your email are a result of the encoding of carriage return characters. Your content is full of Windows-style line feeds (“\r\n”), but the MIME RFP specifies that linefeeds should be Linux and OS X-style (“\n”).

    Bottom Line

    Appears that you typed your content in a Microsoft Windows product (or, at least, a product that uses Windows-1250 or similar encoding) and copy and pasted it into WordPress. Am I right? 🎉😃📢 (If not that, then Subscribe2 or SendGrid has performed some kind of maximum line-length formatting incorrectly, but I’m leaning towards the former…)

    Don’t do that 😉

    (Incidentally, switching from content type TEXT to content type HTML would mask the problem, since HTML readers generally ignore all line feeds)

    @jasonhendriks

    Appears that you typed your content in a Microsoft Windows product (or, at least, a product that uses Windows-1250 or similar encoding) and copy and pasted it into WordPress.

    I’m the site administrator, not the author of these posts. I would never copy & paste from Word. Whether my users do is another story. Apparently some of my users do copy from Word. Others write directly in WordPress. I’ve had the problem with both types of users.

    Even entries with no curly quotes and no copying from another program apparently have non-breaking spaces. I’ve read that WordPress automatically reformats a double space after period in the visual editor to a non-breaking space followed by a normal space. Is this the case?

    I can work to train my users not to copy from Word. I am less sure I can train all my users never to put 2 spaces after a period.

    I’m not even sure how I can find non-breaking spaces, as I can’t see them. In the text editor is there a way to differentiate non breaking spaces from normal spaces?

    I tried installing the plugins wpuntexturize and Remove Double Space. Unfortunately these only seem to change the way entries appear visually, and do not effect the way the Subscribe2 plugin reads them and emails them (at least, as far as I can tell).

    https://wordpress.org/plugins/wpuntexturize/
    https://wordpress.org/plugins/remove-double-space/

    That all is under the assumption that weird characters are causing the windows style line feeds to be inserted. If the windows style line feeds themselves are put there by the user, how do I differentiate windows style line feeds from Unix style line feeds in the WordPress text editor and how to I replace all the windows style line feeds with Unix style line feeds once I’ve identified them?

    All of this is driving me quite insane.

    I have a Computer Science degree. I can program (PHP, etc.) if a programming solution is needed. But it boggles my mind that I am the only one encountering this problem. Subscribe2 is a very popular plugin. A lot of people use Windows machines, put double spaces after periods, and copy from programs like Word. Why am I the only one asking about this in the Subscribe2 support forum?

    I’ve read that WordPress automatically reformats a double space after period in the visual editor to a non-breaking space followed by a normal space. Is this the case?

    That’s totally possible. But I wouldn’t worry about the non-breaking spaces. It’s the carriage returns that are making your email illegible.

    how to I replace all the windows style line feeds with Unix style line feeds once I’ve identified them?

    There’s got to be a plugin for that.. If not I’m sure I could take a stab at one. I guess I could add it as an option to Postman…… But this will be hard for me to test as I’m surrounded by Macs myself.

    A lot of people … copy from programs like Word

    Maybe it’s not that common? I’ll see if I can create some content with CRLF linefeeds and duplicate your issue.

    Cheers!

    Plugin Support mattyrob

    (@mattyrob)

    @chuck Moulton

    did you try the PHPMailer code I posted above?

    Also, can you check in your database tables and see what encoding MySQL is using. check the tablets and also the rows in the tables that contain large amounts of text. Is it UTF-8 or something else?

Viewing 15 replies - 1 through 15 (of 20 total)
  • The topic ‘extra line breaks every line’ is closed to new replies.