JavaMail API - SPLessons

JavaMail Receiving Attachment

Chapter 7

SPLessons 5 Steps, 3 Clicks
5 Steps - 3 Clicks

JavaMail Receiving Attachment

JavaMail Receiving Attachment

shape Description

JavaMail Receving Attachment, By making use of BodyPart and MultiPart classes from JavaMail API sending the email with attachment. This is the additional functionality with sending message. It is necessary to add jar files for sending and receiving an email, they are mail.jar and activation.jar Let us see in detail with example shown below

shape Conceptual
figure

Steps to receive the emails with attachments:
The process for receiving mail with attachments involves session object, BodyPart and MultiPart objects. Here the MultiPart object carries the message text with attachment to access.

shape Examples

For receiving email with attachment

package firstmail;
import java.io.File;
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.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeBodyPart;
public class receieveingattachments {
    private String saveDirectory;
    /**
     * Sets the directory where attached files will be stored.
     * @param dir absolute path of the directory
     */
    public void setSaveDirectory(String dir) {
        this.saveDirectory = dir;
    }
    /**
     * Downloads new messages and saves attachments to disk if any.
     * @param host
     * @param port
     * @param userName
     * @param password
     */
    public void downloadEmailAttachments(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);
        // 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);
        try {
            // connects to the message store
            Store store = session.getStore("pop3");
            store.connect(userName, password); 
            // opens the inbox folder
            Folder folderInbox = store.getFolder("INBOX");
            folderInbox.open(Folder.READ_ONLY);
            // fetches new messages from server
            Message[] arrayMessages = folderInbox.getMessages();
            for (int i = 0; i < arrayMessages.length; i++) {
                Message message = arrayMessages[i];
                Address[] fromAddress = message.getFrom();
                String from = fromAddress[0].toString();
                String subject = message.getSubject();
                String sentDate = message.getSentDate().toString();
                String contentType = message.getContentType();
                String messageContent = "";
                // store attachment file name, separated by comma
                String attachFiles = ""; 
                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
                            String fileName = part.getFileName();
                            attachFiles += fileName + ", ";
                            part.saveFile(saveDirectory + File.separator + fileName);
                        } else {
                            // this part may be the message content
                            messageContent = part.getContent().toString();
                        }
                    }
                    if (attachFiles.length() > 1) {
                        attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
                    }
                } else if (contentType.contains("text/plain")
                        || contentType.contains("text/html")) {
                    Object content = message.getContent();
                    if (content != null) {
                        messageContent = content.toString();
                    }
                } 
                // print out details of each message
                System.out.println("Message #" + (i + 1) + ":");
                System.out.println("\t From: " + from);
                System.out.println("\t Subject: " + subject);
                System.out.println("\t Sent Date: " + sentDate);
                System.out.println("\t Message: " + messageContent);
                System.out.println("\t Attachments: " + attachFiles);
            } 
            // disconnect
            folderInbox.close(false);
            store.close();
        } catch (NoSuchProviderException ex) {
            System.out.println("No provider for pop3.");
            ex.printStackTrace();
        } catch (MessagingException ex) {
            System.out.println("Could not connect to the message store");
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    } 
    /**
     * Runs this program with Gmail POP3 server
     */
    public static void main(String[] args) {
        String host = "pop.gmail.com";
        String port = "995";
        String userName = "9saireddy@gmail.com";
        String password = "splesson";
        String saveDirectory = "E:/Attachment";
        receieveingattachments receiver = new receieveingattachments();
        receiver.setSaveDirectory(saveDirectory);
        receiver.downloadEmailAttachments(host, port, userName, password);
    }
}

Output:
When compile the program all the files from mail inbox will be stored in the file as follows.

When click on Attachment folder as mentioned in the code received files will be opened.

Summary

shape Key Points

  • JavaMail Receving Attachment – By making use of BodyPart and MultiPart classes from JavaMail API sending the email with attachment.
  • JavaMail Receving Attachment – It is necessary to add jar files for sending and receiving an email, they are mail.jar and activation.jar.
  • JavaMail Receving Attachment – The process for receiving mail with attachments involves session object, BodyPart and MultiPart objects.
  • JavaMail Receving Attachment – Here the MultiPart object carries the message text with attachment to access.

shape Programming
Tips

  • After store.connect(host,user,password); only it is possible to get the folder folder.open(Folder.READ_WRITE); because the store is divided into folders to access messages.