Friday, May 20, 2016

Read Emails From Inbox Using Java?


Outlook Settings:

The following settings are the official POP, IMAP and SMTP settings provided by Microsoft for Office 365. You can find these settings in the following locations:

1. In the Outlook Web App, go to Settings.

2. In the Search box at the top, type "POP and IMAP"

3. Click the Sync Email tab on the left-hand menu to edit the POP and IMAP settings.

Gmail Settings:

Check that IMAP is turned on

  1. On your computer, open Gmail.
  2. In the top right, click Settings See all  settings.
  3. Click the Forwarding and POP/IMAP tab.
  4. In the "IMAP access" section, select Enable IMAP.
  5. Click Save Changes.

POP settings

Server name: outlook.office365.com
Port: 995
Encryption method: SSL

Server name: pop.gmail.com
Port: 995
Encryption method: SSL

IMAP settings

Server name: outlook.office365.com
Port: 993
Encryption method: SSL

Server name: imap.gmail.com
Port: 993
Encryption method: SSL

SMTP settings

Server name: smtp.office365.com
Port: 587
Encryption method: TLS or STARTTLS

Server name: smtp.gmail.com
Port SSL: 465
Port for TLS/STARTTLS: 587

 

import java.io.IOException;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage.RecipientType;

public class GmailMailVerification {

private static String user = xyz@gmail.com;
private static String password = "abcd";
final static int MAX_MESSAGES = 10;

public static void main(String argv[]) {
//Read username and password from argments
for (int optind = 0; optind < argv.length; optind++) {
if (argv[optind].equals("-U")) {
user = argv[++optind];
} else if (argv[optind].equals("-P")) {
password = argv[++optind];
}
}

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");

try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", user, password);
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);

System.out.println("Total messages = " + inbox.getMessageCount());
System.out.println("New messages = " + inbox.getNewMessageCount());
System.out.println("Unread messages = " + inbox.getUnreadMessageCount());
System.out.println("Deleted messages = " + inbox.getDeletedMessageCount());

// Get the last 10 messages
int end = inbox.getMessageCount();
int start = end - MAX_MESSAGES + 1;
Message messages[] = inbox.getMessages(start, end);

// Reverse the ordering so that the latest comes out first
Message messageReverse[] = reverseMessageOrder(messages);

// Print the messages out
System.out.println("message size = " + messages.length);
int i = 0;
for (Message message : messageReverse) {
i++;
dumpMessage(i, message);
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
System.exit(1);
} catch (MessagingException e) {
e.printStackTrace();
System.exit(2);
}
}

/*
* reverse the order of the messages
*/
private static Message[] reverseMessageOrder(Message[] messages) {
Message revMessages[] = new Message[messages.length];
int i = messages.length - 1;
for (int j = 0; j < messages.length; j++, i--) {
revMessages[i] = messages[j];
}
return revMessages;
}

private static void dumpMessage(int i, Message message) throws MessagingException {
System.out.println(i + " Message envelope");
System.out.println("------------------");

// FROM
for (Address address : message.getFrom()) {
System.out.println("FROM: " + address.toString());
}

// TO
for (Address address : message.getRecipients(RecipientType.TO)) {
System.out.println("To: " + address.toString());
}

// SUBJECT
System.out.println("Subject: " + message.getSubject());

// BODY MESSAGE
try {
String content = message.getContent().toString();
System.out.println("Body Message: " + content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
---------------------------- OR ----------------------

String host = "pop.gmail.com";
String port = "995";
String userName = "xxxx@gmail.com";
String password = "xxxx";
boolean isconnected = false;
Store store = null;
Folder inbox;
Message[] messages;

/**
* Connect to mail client
* @param host
* @param port
* @param userName
* @param password
* @return
*/
public boolean getConnection(String host, String port, String userName, String password) {
Properties properties = new Properties();

// ---------- Server Setting---------------
properties.put("mail.pop3.host", host);
properties.put("mail.pop3.port", port);
properties.put("mail.smtp.ssl.enable", "true");

// ---------- SSL setting------------------
properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.pop3.socketFactory.fallback", "false");
properties.setProperty("mail.pop3.socketFactory.port", String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
if (!isconnected) {
try {
// Get the POP3 store provider and connect to the store.
store = session.getStore("pop3");
store.connect(userName, password);
isconnected = true;
// opens the inbox folder
System.out.println("Getting INBOX..");
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
System.out.println("Connected to mail client: " + isconnected);
System.out.println("Connected to mail via " + host);
} catch (Exception e) {
e.printStackTrace();
}
}
return isconnected;

}

public String getSubject() {
String subject = "";
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}

// fetches new messages from server
messages = inbox.getMessages();
System.out.println("You have " + messages.length + " mails in your INBOX");

int i = messages.length - 1;
Message message = messages[i];
subject = message.getSubject();
System.out.println("Mail Subject: " + subject);
} catch (Exception e) {
e.printStackTrace();
}
return subject;
}

public String getBodyContent() {
String messageContent = "";
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}
messages = inbox.getMessages();

int i = messages.length - 1;
Message message = messages[i];

String contentType = message.getContentType();

if (contentType.contains("multipart")) {
// content may contain attachments
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
messageContent = getText(message);
} else {
// this part for the message content
messageContent = part.getContent().toString();
}
}
} else if (contentType.contains("text/plain") || contentType.contains("text/html")) {
Object content = message.getContent();
if (content != null) {
messageContent = content.toString();
}
}

} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Mail Body Message: " + messageContent);
return messageContent;
}

public String getAttachmentFileName() {
String fileName = "";
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}
messages = inbox.getMessages();
int i = messages.length - 1;
Message message = messages[i];

String contentType = message.getContentType();

if (contentType.contains("multipart")) {
// content may contain attachments
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
// this part is attachment
fileName = part.getFileName();
}

}
}

} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Attachment File Name: " + fileName);
return fileName;
}

public static String getText(Part p) {
try {

if (p.isMimeType("text/*")) {
String s = (String) p.getContent();
return s;
}

if (p.isMimeType("multipart/alternative")) {
// prefer html text over plain text
Multipart mp = (Multipart) p.getContent();
String text = null;
for (int i = 0; i < mp.getCount(); i++) {
Part bp = mp.getBodyPart(i);
if (bp.isMimeType("text/plain")) {
if (text == null)
text = getText(bp);
continue;
} else if (bp.isMimeType("text/html")) {
String s = getText(bp);
if (s != null)
return s;
} else {
return getText(bp);
}
}
return text;
} else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart) p.getContent();
for (int i = 0; i < mp.getCount(); i++) {
String s = getText(mp.getBodyPart(i));
if (s != null)
return s;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public void deleteEmails() throws Exception {
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}
messages = inbox.getMessages();
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
message.setFlag(Flags.Flag.DELETED, true);
}
inbox.close(true);
store.close();
System.out.println("deleted mail");
} catch (Exception e) {
e.printStackTrace();
}
}

public void closeMailConnections() throws MessagingException {
if (null != inbox && null != store) {
try {
inbox.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

No comments:

Post a Comment