Gmail Changes, Smarter Parsing
and Edge Cases
Summary: The last couple of weeks have been busy ones for our dev team. Among the highlights: we debugged a particular nasty change with Gmail, made our HTML parser even smarter, and squashed a number of annoying edge cases.
We started with a head scratcher; all of the sudden, two customers began seeing blank emails in their mailboxes. Both were using custom scripts to send email into their Gmail accounts, and neither had changed anything on their end. The emails looked correct in Gmail, but in Groove:
Our logs on made things more confusing. We were in fact receiving blank emails from our email provider, Cloudmailin. While they don’t have as many features as the Sendgrids of the world, Cloudmailin has always been rock-solid when it comes to deliverability.
The team at Coudmailin was as perplexed as us, but they immediately put all their resources behind fixing the problem. It wasn’t an immediate fix, but they were able to finally diagnose the problem.
The blank emails were coming from Google without a content-type header.
While our customers hadn’t changed anything, Google had made one very big change. They stopped adding the content-type header to messages going through their servers, and our customers scripts were broken overnight.
Thankfully Cloudmailin had a fix in production within 15 minutes of finding the issue, and we started seeing the results immediately.
While we put some very nice band-aids on incoming email last month, we knew we wanted to do more. The code had devolved over the years as each new bug was fixed, and it had become harder and harder to use.
So with a goal of cleaning up HTML emails from the top ten clients, we started rewriting code. We won’t bore you with the details, but we ended up with a modular design that allows us to customize parsing not only by email client but also individual versions.
The end result is cleaner tickets across the board, after we removed text such as:
I Heard You Like Email
Well how about emails inside your emails? We definitely didn’t like it; once, we saw how inline replies to previous messages were causing email histories to render recursively.
Talk about deja vu! After a couple changes to the database, we were able to start tracking references between emails. And now our outgoing emails know if a more recent email includes a previous message and won’t render it twice.
And of course we spent our fair share of time crushing the little bugs that take the fun out of using Groove. Little things like:
- misaligned links on smaller screens
- HTML tags in labels parsed from certain email clients
- better default timezone, instead of American Samoa :)
Which add up to smoother seas for all ahead. See you in a couple weeks!