Files
thpeetz-notes/Posteingang/Java mail IMAP list example - List all the email a.md

154 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: >-
Java mail IMAP list example - List all the email addresses in an IMAP mailbox
| alvinalexander.com
updated: 2024-06-03 19:13:23Z
created: 2024-06-03 19:13:23Z
source: >-
https://alvinalexander.com/blog/post/java/i-need-get-all-of-my-email-addresses-out-of-imap-mailbox/
---
By Alvin Alexander. Last updated: March 12, 2018
Java Mail (JavaMail) IMAP FAQ: Can you show me how to get a list of all the email addresses in an IMAP mailbox using the Java Mail API (JavaMail API)?
Sure. Here's the source code for a Java mail (JavaMail) program that extracts all of the "from" fields out of a specified mailbox. This works for both POP3 and IMAP mailboxes.
Before going to the code, note the cool use of a `TreeSet` (`java.util.TreeSet`) in this example. Based on our offline discussion, you mentioned that you really want is this:
1. Only the unique email addresses, and
2. The addresses sorted alphabetically.
Therefore, a TreeSet is a great data type for this purpose.
##
![Ezoic](../_resources/ezoicbwa_3db014528c7e452480e81686ac4ece27.png "ezoic")My JavaMail IMAP email address list program
With no further ado, here is the source code for my JavaMail email address list/extractor:
import javax.mail.\*;
import javax.mail.internet.\*;
import java.util.\*;
import java.io.\*;
/\*\*
\* My JavaMail email address extractor.
\* A JavaMail API example.
\* @author alvin alexander, alvinalexander.com.
\*/
public class AddressExtractor
{
public static void main(String\[\] args)
{
Properties props = new Properties();
String host = args\[0\];
String username = args\[1\];
String password = args\[2\];
//String provider = "pop3";
String provider = "imap";
try
{
//Connect to the server
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore(provider);
store.connect(host, username, password);
//open the inbox folder
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
// get a list of javamail messages as an array of messages
Message\[\] messages = inbox.getMessages();
TreeSet treeSet = new TreeSet();
for(int i = 0; i < messages.length; i++)
{
String from = getFrom(messages\[i\]);
if ( from!=null)
{
from = removeQuotes(from);
treeSet.add(from);
}
}
Iterator it = treeSet.iterator();
while ( it.hasNext() )
{
System.out.println("from: " + it.next());
}
//close the inbox folder but do not
//remove the messages from the server
inbox.close(false);
store.close();
}
catch (NoSuchProviderException nspe)
{
System.err.println("invalid provider name");
}
catch (MessagingException me)
{
System.err.println("messaging exception");
me.printStackTrace();
}
}
private static String getFrom(Message javaMailMessage)
throws MessagingException
{
String from = "";
Address a\[\] = javaMailMessage.getFrom();
if ( a==null ) return null;
for ( int i=0; i<a.length; i++ )
{
Address address = a\[i\];
from = from + address.toString();
}
return from;
}
private static String removeQuotes(String stringToModify)
{
int indexOfFind = stringToModify.indexOf(stringToModify);
if ( indexOfFind < 0 ) return stringToModify;
StringBuffer oldStringBuffer = new StringBuffer(stringToModify);
StringBuffer newStringBuffer = new StringBuffer();
for ( int i=0, length=oldStringBuffer.length(); i<length; i++ )
{
char c = oldStringBuffer.charAt(i);
if ( c == '"' || c == '\\'' )
{
// do nothing
}
else
{
newStringBuffer.append(c);
}
}
return new String(newStringBuffer);
}
}
##
![Ezoic](../_resources/ezoicbwa_3db014528c7e452480e81686ac4ece27.png "ezoic")JavaMail IMAP list example - Discussion
Besides the TreeSet and JavaMail stuff going on, the `removeQuotes()` method may also be of interest to you. This method removes single- and double-quotes from the email address. During testing, I ran into situations where one email address was \*almost\* the same as another address, except for cases where one email address had a name embedded in single-quotes, and the other address had no quotes or double-quotes. Because both addresses are technically the same for what I needed, I added this method to strip out all quotes.
![Ezoic](../_resources/ezoicbwa_3db014528c7e452480e81686ac4ece27.png "ezoic")
Note that you will also need the following JavaMail API jar files for this Java email extractor class to work:
1. `mail.jar`
2. `activation.jar`
These jar files can be downloaded from Sun's web site. Just look for the JavaMail API on their site for instructions on obtaining these Jar files.