Ghost's missing dot

Email can be encoded in various formats, one of which is quoted-printable.

Quoted-printable encoding uses the equals sign "=" as an escape character in order to transmit 8-bit data over 7-bit "medium". It also limits line length to 76, as some software has limits on line length.

Ghost, the blogging platform of this blog, uses the Nodemailer library, whose default encoding in emails is quoted-printable.

For example, a signup confirmation for a Ghost blog would look something like this:

... <a href="http://engineering.como.com/ghost/signup/MTQxNTcwNzM5MTYwN3x5dXJ5QG5peC5jby5pbHx3NVBmUUN4RGZrcGhKc3FPOElybXNZNWtzR0FMTU9tRFI5UlNyRWQ4SGJZPQ==/" style="color: #5ba4e5;">Click here to activate your account</a> ...

After being encoded into quoted-printable encoding, it would look like this:

... <a href=3D=22http://engineering=
.como.com/ghost/signup/MTQxNTcwNzM5MTYwN3x5dXJ5QG5peC5jby5pbHx3NVBmUUN4RGZr=
cGhKc3FPOElybXNZNWtzR0FMTU9tRFI5UlNyRWQ4SGJZPQ=3D=3D/=22 style=3D=22color: =  
#5ba4e5;=22>Click here to activate your account</a> ...

You may notice that the href's value is split to the next line with '=', however, Outlook (Outlook 2013 Plus, in my case) parses it as:

<a href="http://engineeringcomo.com/ghost/signup/MTQxNTcwNzM5MTYwN3x5dXJ5QG5peC5jby5pbHx3NVBmUUN4RGZrcGhKc3FPOElybXNZNWtzR0FMTU9tRFI5UlNyRWQ4SGJZPQ==/" style="color: #5ba4e5;">Click here to activate your account</a>  

It ate the dot ('.') after engineering!

Just imagine how much time was wasted: After seeing the missing dot in Ghost's confirmation email, and checking Ghost's configuration and then its code, I finally realized that the problem is in Outlook.

For now I've patched Ghost to tell Nodemailer to use base64 encoding instead.