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
Comments
all this mails will be delete, right?
please help, thanks.