The JavaMail API provides a platform-independent and protocol-independent framework to build mail and messaging applications.
The mail read package provides methods to connect to IMAP or POP3 accounts, retrieve mails and extract their content.
1 Mail Store
Mail store defines a connection to a mail server using one of the supported protocols: imap, imaps, pop, pops
1.1 MailStore Class
Return | Options | Description |
---|---|---|
JSMailStore | Ax.mail.Store(String protocol, options) | The constructor receives a parameter providing mail communication protocol. Protocols provided are: pop, pops, imap and imaps. |
String | getURLName() | Get connection URL |
JSMailStore | connect(String host, String user, String password) | Connects to host server using protocol defined in constructor. |
JSMailStore | connect(String host, int Port, String user, String password) | Connects to host server using protocol defined in constructor. |
List<JSMailFolder> | listFolders() | Gets folders in Server. |
JSMailFolder | getFolder(String folder) | gets e-mail folder class pointing to folder passed as parameter. |
JSMailFolder | getDefaultFolder | . |
List<JSMailFolder> | getPersonalNamespaces() | . |
List<JSMailFolder> | getSharedNamespaces() | . |
1.2 MailFolder Class
Return | Options | Description |
---|---|---|
JSMailMessage | Ax.mail.MailMessage(String ContentRFC) | The constructor receives a parameter providing mail in RFC String format generated by Ax.mail.MailerMessage().getMessageContent(null).Returns an JSMailMessage. |
List<JSMailMessage> | expunge() | Expunge (permanently remove) messages marked DELETED. Returns an array containing the expunged message objects. |
String | getName() | Get Folder name |
String | getFullName() | Returns the full name of this Folder. If the folder resides under the root hierarchy of this Store, the returned name is relative to the root. Otherwise an absolute name, starting with the hierarchy delimiter, is returned. |
int | getNewMessageCount | Get the number of new messages in this Folder. |
int | getUnreadMessageCount | Get the number of unreaded messages in folder. |
JSMailFolder | open(boolean write) | Open this Folder. open the Folder READ_ONLY or READ_WRITE. |
JSMailMessage[] | getMessages() | Read all messages in folder and mark them as seen. Returns an empty array if the folder is empty. |
JSMailMessage[] | getMessages(boolean markSeen) | Get all Message objects from this Folder. Returns an empty array if the folder is empty. |
JSMailMessage[] | getMessages(boolean markSeen) | Get all Message objects from this Folder. Returns an empty array if the folder is empty. |
List<JSMailFolder> | listFolders() | Gets folders depending of this folder. |
List<JSMailFolder> | listFolders(String pattern) | Gets folders depending of this folder which comply with pattern. |
void | copyMessages(JSMailMessage[] msgs, JSMailFolder folder) | Copy messages in array to other folder. |
1.3 JSMailMessage Class
Return | Options | Description |
---|---|---|
JDBCBlob | toBlob() | Return the message as binary content (the full mail message). |
boolean | isSet(Flag flag) | Check whether the flag specified in the flag argument is set in this message. Flags supported: Ax.mail.Message.SEEN, Ax.mail.Message.DRAFT, Ax.mail.Message.ANSWERED, Ax.mail.Message.DELETED, Ax.mail.Message.DRAFT, Ax.mail.Message.FLAGGED, Ax.mail.Message.RECENT |
void | setFlag(Flag flag, boolean set) | Set the specified flag on this message to the specified value. |
String | getMessageID() | Get ID of Message. |
int | getMessageNumber() | . |
int | getSize() | Get message size. |
String | getFrom() | Get from part of message. |
String | getTo() | Get to part of message. |
String | getCC() | Get CC part of message. |
String | getBCC() | Get BCC part of message. |
String | getReplyTo() | Get Reply-To part of message. |
String | getAllRecipients() | Get all recipients of message. |
String | getSubject() | Get subject of message. |
Date | getSentDate() | Get sent date of message. |
Date | getReceivedDate() | Get received date of message. |
String | getFileName() | Get the filename associated with this part, if possible. Useful if this part represents an "attachment" that was loaded from a file. |
String | getContentType() | Get the content type of this part. |
String | getDisposition() | . |
String | getDescription() | . |
Object | getContent() | Return the content as a Java object. The type of the returned object is of course dependent on the content itself. For example, the object returned for "text/plain" content is usually a String object. The object returned for a "multipart" content is always a Multipart subclass. |
String | getMessageContent() | Output the message as an RFC 822 format stream. |
String | getMessageContent(String[] ignoreList) | Output the message as an RFC 822 format stream, without specified headers. |
String | getMessageContentText() | Return the text content of the message. Only retrieves the text/plain part of message. |
String | getMessageContentHtml() | Return the text content of the message. Only retrieves the text/html part of message. |
ArrayList<JSBlob> | getMessageParts() | Get the files attached to message as an array of blobs. |
2 Gmail example
Copy
console.log("==============: Connecting to mail server") var store = new Ax.mail.Store("imaps", properties => { properties.put("debug", "false"); }); store.connect("imap.gmail.com", 993, "*****", "*****"); console.log("==============: Store") for (var folder of store.listFolders()) { console.log(" folder:" + folder.getName() + " / " + folder.getFullName()); } console.log(" personalNS:" + store.getPersonalNamespaces()); console.log(" sharedNS:" + store.getSharedNamespaces()); console.log(" URL:" + store.getURLName()); // Open Inbox (READ+WRITE) console.log("==============: Open inbox") var inbox = store.getFolder("Inbox").open(true); console.log(" name:" + inbox.getName()); console.log(" fullname:" + inbox.getFullName()); console.log("unreadMessages:" + inbox.getUnreadMessageCount()); // Get messages marking them as SEEN console.log("==============: Reading message") var messages = inbox.getMessages(true); for (var message of messages) { message.setFlag(Ax.mail.Message.FLAGGED, true); console.log("==============: ") console.log(" toBlob: " + message.toBlob()) console.log(" MessageID: " + message.getMessageID()) console.log(" MessageNumber: " + message.getMessageNumber()) console.log(" From: " + message.getFrom()) console.log(" CC: " + message.getCC()) console.log(" BCC: " + message.getBCC()) console.log(" Subject: " + message.getSubject()) console.log(" AllRecipients: " + message.getAllRecipients()) console.log(" Content-Type: " + message.getContentType()) console.log(" Size: " + message.getSize()) console.log(" isSeen: " + message.isSet(Ax.mail.Message.SEEN)) console.log(" isDraft: " + message.isSet(Ax.mail.Message.DRAFT)) console.log(" isAnswered: " + message.isSet(Ax.mail.Message.ANSWERED)) console.log(" isDeleted: " + message.isSet(Ax.mail.Message.DELETED)) console.log(" isDraft: " + message.isSet(Ax.mail.Message.DRAFT)) console.log(" isFlagged: " + message.isSet(Ax.mail.Message.FLAGGED)) console.log(" isRecent: " + message.isSet(Ax.mail.Message.RECENT)) console.log(" Content: " + message.getContent()) console.log(" MessageText: " + message.getMessageContentText()) console.log(" MessageHtml: " + message.getMessageContentHtml()) console.log(" ------ parts -----"); // Get message parts for (var blob of message.getMessageParts()) { if (blob.isInline()) { console.log(" INLINE: " + blob); } else if (blob.isAttachment()) { console.log(" ATTACHMENT: " + blob); } else { console.log(" BODY: " + blob); console.log(" TEXT: " + blob.getTextContent()); } } } // We cannot delete mails in Gmail programmatically. // All we can do is to copy the mails from Inbox to Trash folder which // then would get deleted automatically after 30 days. // // In gmail copying to trash is like moving the message to email. // // Others GMail folders : // * [Gmail]/Inbox Inbox message. // * [Gmail]/All Mail This folder contains all of your Gmail messages. // * [Gmail]/Drafts Your drafts. // * [Gmail]/Sent Mail Messages you sent to other people. // * [Gmail]/Spam Messages marked as spam. // * [Gmail]/Starred Starred messages. // * [Gmail]/Trash Messages deleted from Gmail. // Open Trash (READ+WRITE) if (false) { var trash = store.getFolder("[Gmail]/Trash").open(true); inbox.copyMessages(messages, trash); }
3 iMAP example
This imap example show how you can iterate to get folders beneeth folders in main level.
Copy
function show_messages(folder) { folder.open(false); // Open read-only var messages = folder.getMessages(false); // do not mark as seen for (var message of messages) { console.log("==============: ") console.log(" MessageID: " + message.getMessageID()) console.log(" MessageNumber: " + message.getMessageNumber()) console.log(" From: " + message.getFrom()) console.log(" CC: " + message.getCC()) console.log(" BCC: " + message.getBCC()) console.log(" Subject: " + message.getSubject()) console.log(" AllRecipients: " + message.getAllRecipients()) console.log(" Content-Type: " + message.getContentType()) console.log(" Size: " + message.getSize()) console.log(" isSeen: " + message.isSet(Ax.mail.Message.SEEN)) console.log(" isDraft: " + message.isSet(Ax.mail.Message.DRAFT)) console.log(" isAnswered: " + message.isSet(Ax.mail.Message.ANSWERED)) console.log(" isDeleted: " + message.isSet(Ax.mail.Message.DELETED)) console.log(" isDraft: " + message.isSet(Ax.mail.Message.DRAFT)) console.log(" isFlagged: " + message.isSet(Ax.mail.Message.FLAGGED)) console.log(" isRecent: " + message.isSet(Ax.mail.Message.RECENT)) } folder.close(); } var store = new Ax.mail.Store("imaps") .connect("mail-es.securemail.pro", "*****", "*****"); // Get messages from folders level 2 deep for (var folder of store.listFolders()) { console.log(" folder:" + folder.getName() + " / " + folder.getFullName()); console.log("--------------------------------------------"); show_messages(folder); // Get subfolders (level 2 deep) of main folders for (var folder2 of folder.list()) { console.log(" folder2:" + folder2.getName() + " / " + folder2.getFullName()); console.log("--------------------------------------------"); show_messages(folder2); } }
4 Simple iteration and delete examples
4.1 In gmail servers
Copy
var store = new Ax.mail.Store("imaps").connect("imap.gmail.com", 993, "*****", "*****"); var inbox = store.getFolder("Inbox").inbox.open(true); var trash = store.getFolder("[Gmail]/Trash").open(true); var messages = inbox.getMessages(); // do mark as seen for (var message of messages) { // In gmail, copying messge to trash is like deleting it inbox.copyMessages(messages, trash); } trash.close() inbox.close();
4.2 Using conventional mail servers
Copy
var store = new Ax.mail.Store("pop3").connect("mail.server.com", "user", "passwd"); // iterate in first level folders for (var folder of store.listFolders()) { if (folder.getName() == "INBOX") { // When in the folder we want to iteract, we should open it in "Writable Mode" folder.open(true); // Open NOT read-only var messages = folder.getMessages(); // do mark as seen for (var message of messages) { for (var blob of message.getMessageParts()) { if (blob.isInline() || blob.isAttachment()) { // Process attachment } } } // Delete email message.setFlag(Ax.mail.Message.DELETED, true); // Close email folder access folder.close(); } }