As reported by @arpitsriv on Gitter, it seems possible to write an email with possibly null parameters.
This causes defacts later on, for instance in his case when enqueing the email.
We need upfront null value rejection on the MailImpl object, via Preconditions. This will bring the error closer to the code causing the defect, and makes debugging easier.
Unit tests should be provided on the MailImpl object.
Thanks to @arpitsriv for his time spotting and understanding this issue.