From 576eb156389d9f4391322d24610feb5fa51f2892 Mon Sep 17 00:00:00 2001 From: Juanjo Alvarez Date: Tue, 17 Jun 2014 14:46:40 +0200 Subject: [PATCH] some improvements to emails.d decoders (after testing against 100.000+ emails) --- email.d | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/email.d b/email.d index 2d977f69..2c5efc16 100644 --- a/email.d +++ b/email.d @@ -815,6 +815,13 @@ string decodeEncodedWord(string data) { data = data[questionMark + 2 .. $]; delimiter = data.indexOf("=?"); + if (delimiter == 1 && data[0] == ' ') { + // a single space between encoded words must be ignored because it is + // used to separate multiple encoded words (RFC2047 says CRLF SPACE but a most clients + // just use a space) + data = data[1..$]; + delimiter = 0; + } immutable(ubyte)[] decodedText; if(encoding == "Q") @@ -843,6 +850,8 @@ immutable(ubyte)[] decodeQuotedPrintable(string text) { if(b == '=') { state++; hexByte = 0; + } else if (b == '_') { // RFC2047 4.2.2: a _ may be used to represent a space + ret ~= ' '; } else ret ~= b; break;