MIME message senders appear in formats such as:
"John Doe" <johndoe@gmail.com>
<johndoe@gmail.com>
I'm trying to figure out how to extract the string "johndoe@gmail.com" in the above examples, although I will also need the "johndoe" and "gmail.com" parts (per RFC I'm pretty sure splitting on @
is all that's needed from here). Obviously regex-ing up my own parser is one (not great) option.
It seemed this may be possible using javax.mail.internet.MimeMessage
. All of the constructors require a Folder
which I do not have (well, I sort of do, it exists in the IMAP layer), e.g.
MimeMessage(Folder folder, InputStream is, int msgnum)
Which makes me feel I'm using this class wrong. Nonetheless, if I parse this way I do get access to the getFrom()
method which returns an array of Address
, which itself doesn't offer methods of use to me.
Using mime4j it's easy to get this far:
case T_FIELD: // field means header
if(token.getName() == "from") {
// get raw string as above - unparsed
So using mime4j or using java, javax etc. utilities it should be possible to extract the "a@b.com" part of the address from there, but I haven't found a class within javax or mime4j that is responsible for this yet.