I wrote an application which gets all emails from an inbox, filters the emails which contain a specific string and then puts those emails in an ArrayList.
After the ema
I found reading e-mail with the JavaMail library much more difficult than expected. I don't blame the JavaMail API, rather I blame my poor understanding of RFC-5322 -- the official definition of Internet e-mail.
As a thought experiment: Consider how complicated an e-mail message can become in the real world. It is possible to "infinitely" embed messages within messages. Each message itself may have multiple attachments (binary or human-readable text). Now imagine how complicated this structure becomes in the JavaMail API after parsing.
A few tips that may help when traversing e-mail with JavaMail:
Message and BodyPart both implement Part.MimeMessage and MimeBodyPart both implement MimePart.Part or MimePart. This will allow generic traversal methods to be built more easily.These Part methods will help to traverse:
String getContentType(): Starts with the MIME type. You may be tempted to treat this as a MIME type (with some hacking/cutting/matching), but don't. Better to only use this method inside the debugger for inspection.
boolean isMimeType(String) to match. Read docs carefully to learn about powerful wildcards, such as "multipart/*".Object getContent(): Might be instanceof:
Multipart -- container for more Parts
Multipart, then iterate as zero-based index with int getCount() and BodyPart getBodyPart(int)
BodyPart implements PartPart.isMimeType("text/plain")Part.isMimeType("text/html")Message (implements Part) -- embedded or attached e-mailString (just the body text -- plain text or HTML)
InputStream (probably a BASE64-encoded attachment)String getDisposition(): Value may be null
Part.ATTACHMENT.equalsIgnoreCase(getDisposition()), then call getInputStream() to get raw bytes of the attachment.Finally, I found the official Javadocs exclude everything in the com.sun.mail package (and possibly more). If you need these, read the code directly, or generate the unfiltered Javadocs by downloading the source and running mvn javadoc:javadoc in the mail project module of the project.