The poorly documented answer is that new() requires data. I was able to get it to work, but only when I either pass new() data (text, html or an attachment) or reproduce the logic in attach() to create a multi-part mime format. You can't create a new empty object and add data to it.