Want to read something of your Gmail (not only subject but body content too) using javax Lib? For contentBody where MimeType is "text/plain" i.e. it's a plain text message, it works straight forward by using getContent() method but in case you have contentBody MimeType= text/html i.e. the message body only in HTML, you need to take care of Multipart for multipart/alternative and multipart/mixed based on your requirements.
Here's the working code:
Note* You still need to tweak the code based on your requirements like if there are more than 1 unread or read emails having the same subject that you are trying to look for in the subject like by setting Flags.Flag.DELETED=True before reading this new email or using Flags.Flag.RECENT=True.
You may need to enable less secure apps to use JavaMail with Gmail: https://myaccount.google.com/lesssecureapps
// userName is your gmail userName
// password is your gmail password
// subjectToContains is what you need to look for in the target Email Subject
public static boolean readMailContent(String userName, String password, String subjectToContains) {
Folder folder = null;
Store store = null;
System.out.println("***READING MAILBOX...");
try {
Properties props = new Properties();
props.put("mail.store.protocol", "imaps");
Session session = Session.getInstance(props);
store = session.getStore("imaps");
store.connect("imap.gmail.com", userName, password);
folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
System.out.println("No of Messages : " + folder.getMessageCount());
System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
for (int i = 0; i < messages.length; i++) {
System.out.println("Reading MESSAGE # " + (i + 1) + "...");
Message msg = messages[i];
String strMailSubject = "", strMailBody = "";
// Getting mail subject
Object subject = msg.getSubject();
// Getting mail body
Object content = msg.getContent();
// Casting objects of mail subject and body into String
strMailSubject = (String) subject;
strMailBody = content.toString();
// ---- This is what you want to do for fetching Subject and body------
if (strMailSubject.contains(subjectToContains)) {
System.out.println(strMailSubject);
if (content instanceof String) {
String body = (String) content;
System.out.println((String) msg.getContent());
} else if (content instanceof Multipart) {
Multipart mp = (Multipart) content;
Multipart contentBody = (Multipart) content;
BodyPart htmlTextPart = null;
int count = contentBody.getCount();
for (int j = 0; j < count; j++) {
BodyPart part = contentBody.getBodyPart(j);
if (part.isMimeType("text/html")) {
htmlTextPart = part;
String html = (String) htmlTextPart.getContent();
System.out.println("Your Body text is: "+ html);
}
}
}
break;
}
}
return true;
} catch (MessagingException messagingException) {
messagingException.printStackTrace();
} catch (IOException ioException) {
ioException.printStackTrace();
} finally {
if (folder != null) {
try {
folder.close(true);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (store != null) {
try {
store.close();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return false;
}
Here's the dependency that you need to add in your pom file:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
Comments
Post a Comment