JavaMail - How to delete email on mail server programmatically
- Details
- Written by Nam Ha Minh
- Last Updated on 09 July 2019   |   Print Email
In this post, I will guide you how to write Java code to delete emails on a mail server programmatically.
To send emails with Java, you need to use JavaMail jar files. If you use Maven, add the following dependency to the pom.xml file:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>
This will add the javax.mail-VERSION.jar and activation-VERSION.jar to the project's classpath. If you have to add them manually, download from JavaMail Project page.
To delete e-mail messages which are stored on mail server using JavaMail API, it requires following the steps below:
- Open the inbox folder in READ_WRITE mode.
- Retrieves messages from inbox folder (For more details, see the article Receive e-mail messages from a POP3-IMAP server).
- Iterate through the received messages, if one needs to be delete, mark it as deleted by invoking the method setFlag(Flags.Flag.DELETED, true)on the Messageobject. For example:
if (message.getSubject().contains("Promo")) {
message.setFlag(Flags.Flag.DELETED, true);
}
- The messages marked DELETED are not actually deleted, until we call the expunge() method on the Folder object, or close the folder with expunge set to true. For example:
boolean expunge = true; folder.close(expunge);
or:
folder.expunge(); folder.close(false);
The following sample program demonstrates how to conditionally delete e-mail messages with subject field contains the word “Newsletter”:
package net.codejava.mail;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
/**
* This program demonstrates how to remove e-mail messages on a mail server
* using JavaMail API.
* @author www.codejava.net
*
*/
public class EmailMessageRemover {
/**
* Deletes all e-mail messages whose subject field contain
* a string specified by 'subjectToDelete'
* @param host
* @param port
* @param userName
* @param password
* @param subjectToDelete delete if the message's subject contains this value.
*/
public void deleteMessages(String host, String port,
String userName, String password, String subjectToDelete) {
Properties properties = new Properties();
// server setting
properties.put("mail.imap.host", host);
properties.put("mail.imap.port", port);
// SSL setting
properties.setProperty("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.imap.socketFactory.fallback", "false");
properties.setProperty("mail.imap.socketFactory.port",
String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
try {
// connects to the message store
Store store = session.getStore("imap");
store.connect(userName, password);
// opens the inbox folder
Folder folderInbox = store.getFolder("INBOX");
folderInbox.open(Folder.READ_WRITE);
// fetches new messages from server
Message[] arrayMessages = folderInbox.getMessages();
for (int i = 0; i < arrayMessages.length; i++) {
Message message = arrayMessages[i];
String subject = message.getSubject();
if (subject.contains(subjectToDelete)) {
message.setFlag(Flags.Flag.DELETED, true);
System.out.println("Marked DELETE for message: " + subject);
}
}
// expunges the folder to remove messages which are marked deleted
boolean expunge = true;
folderInbox.close(expunge);
// another way:
//folderInbox.expunge();
//folderInbox.close(false);
// disconnect
store.close();
} catch (NoSuchProviderException ex) {
System.out.println("No provider.");
ex.printStackTrace();
} catch (MessagingException ex) {
System.out.println("Could not connect to the message store.");
ex.printStackTrace();
}
}
/**
* Runs this program to delete e-mail messages on a Gmail account
* via IMAP protocol.
*/
public static void main(String[] args) {
String host = "imap.gmail.com";
String port = "993";
String userName = "your_email";
String password = "your_password";
EmailMessageRemover remover = new EmailMessageRemover();
// try to delete all messages contain this string its Subject field
String subjectToDelete = "Newsletter";
remover.deleteMessages(host, port, userName, password, subjectToDelete);
}
} The program above is tested with a Gmail account using IMAP protocol. Change value of userNameand password to match with your account.
Other JavaMail Tutorials:
- How to send plain text email using JavaMail
- How to send email in HTML format using JavaMail
- How to send email with attachments using JavaMail
- How to insert images into email for sending with JavaMail
- How to receive emails from server using JavaMail
- How to download attachements in emails using JavaMail
- How to search email messages using JavaMail
About the Author:
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.
Comments
all this mails will be delete, right?
please help, thanks.