Ah...
If I add a line like so:
Content-Type: multipart/alternative; boundary=\"----=_NextPart_000_005F_01C32E8B.2C7DCE40\"
to the start of my message, Matthew's example code works just fine. And in looking at a message I sent to myself in Apple Mail, I see that that content type *is* included but it's up higher in the message, in the headers. So it's missing from my sample message but if I'm parsing a real message I'll have it. *phew*!
Thanks for the tip, Matthew!