Click here to Skip to main content
15,887,449 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
See more:
i have prepared an email reading application.
when t run it plain/text email's are coming correctly.
but multipart email's are not comming correctly.
i want to know how can i recieve multipart email's content in text
type..
the source code is written bellow.
can you help me to correct it.
if it so , pleace edit the source code and send it back.


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication52;

import com.sun.mail.pop3.POP3SSLStore;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.FetchProfile;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.ContentType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.ParseException;

public class GmailUtilities {

   private Session session = null;
   private Store store = null;
   private String username, password;
   private Folder folder;

   public GmailUtilities() {

   }

   public void setUserPass(String username, String password) {
       this.username = username;
       this.password = password;
   }

   public void connect() throws Exception {

       String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

       Properties pop3Props = new Properties();

       pop3Props.setProperty("mail.pop3.socketFactory.class",
SSL_FACTORY);
       pop3Props.setProperty("mail.pop3.socketFactory.fallback",
"false");
       pop3Props.setProperty("mail.pop3.port",  "995");
       pop3Props.setProperty("mail.pop3.socketFactory.port", "995");

       URLName url = new URLName("pop3", "pop.gmail.com", 995, "",
               username, password);

       session = Session.getInstance(pop3Props, null);
       store = new POP3SSLStore(session, url);
       store.connect();

   }

   public void openFolder(String folderName) throws Exception {

       // Open the Folder
       folder = store.getDefaultFolder();

       folder = folder.getFolder(folderName);

       if (folder == null) {
           throw new Exception("Invalid folder");
       }

       // try to open read/write and if that fails try read-only
       try {

           folder.open(Folder.READ_WRITE);

       } catch (MessagingException ex) {

           folder.open(Folder.READ_ONLY);

       }
   }

   public void closeFolder() throws Exception {
       folder.close(false);
   }

   public int getMessageCount() throws Exception {
       return folder.getMessageCount();
   }

   public int getNewMessageCount() throws Exception {
       return folder.getNewMessageCount();
   }

   public void disconnect() throws Exception {
       store.close();
   }

   public void printMessage(int messageNo) throws Exception {
       System.out.println("Getting message number: " + messageNo);

       Message m = null;

       try {
           m = folder.getMessage(messageNo);
           dumpPart(m);
       } catch (IndexOutOfBoundsException iex) {
           System.out.println("Message number out of range");
       }
   }

   public void printAllMessageEnvelopes() throws Exception {

       // Attributes & Flags for all messages ..
       Message[] msgs = folder.getMessages();

       // Use a suitable FetchProfile
       FetchProfile fp = new FetchProfile();
       fp.add(FetchProfile.Item.ENVELOPE);
       folder.fetch(msgs, fp);

       for (int i = 0; i < msgs.length; i++) {
           System.out.println("--------------------------");
           System.out.println("MESSAGE #" + (i + 1) + ":");
           dumpEnvelope(msgs[i]);

       }

   }

   public void printAllMessages() throws Exception {

       // Attributes & Flags for all messages ..
       Message[] msgs = folder.getMessages();

       // Use a suitable FetchProfile
       FetchProfile fp = new FetchProfile();
       fp.add(FetchProfile.Item.ENVELOPE);
       folder.fetch(msgs, fp);

       for (int i = 0; i < msgs.length; i++) {
           System.out.println("--------------------------");
           System.out.println("MESSAGE #" + (i + 1) + ":");
           dumpPart(msgs[i]);
       }


   }


   public static void dumpPart(Part p) throws Exception {
       if (p instanceof Message)
           dumpEnvelope((Message)p);

       String ct = p.getContentType();
       try {
           pr("CONTENT-TYPE: " + (new ContentType(ct)).toString());
       } catch (ParseException pex) {
           pr("BAD CONTENT-TYPE: " + ct);
       }

       /*
        * Using isMimeType to determine the content type avoids
        * fetching the actual content data until we need it.
        */
       if (p.isMimeType("text/plain")) {
           pr("This is plain text");
           pr("---------------------------");
           System.out.println((String)p.getContent());
       } else {

           // just a separator
           pr("---------------------------");

       }
   }

   public static void dumpEnvelope(Message m) throws Exception {
       pr(" ");
       Address[] a;
       // FROM
       if ((a = m.getFrom()) != null) {
           for (int j = 0; j < a.length; j++)
               pr("FROM: " + a[j].toString());
       }

       // TO
       if ((a = m.getRecipients(Message.RecipientType.TO)) != null) {
           for (int j = 0; j < a.length; j++) {
               pr("TO: " + a[j].toString());
           }
       }

       // SUBJECT
       pr("SUBJECT: " + m.getSubject());

       // DATE
       Date d = m.getSentDate();
       pr("SendDate: " +
               (d != null ? d.toString() : "UNKNOWN"));


   }

   static String indentStr =
"                                               ";
   static int level = 0;

   /**
    * Print a, possibly indented, string.
    */
   public static void pr(String s) {

       System.out.print(indentStr.substring(0, level * 2));
       System.out.println(s);
   }

}





/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication52;

public class Main {

   /** Creates a new instance of Main */
   public Main() {
   }

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {

       try {

           GmailUtilities gmail = new GmailUtilities();
           gmail.setUserPass(" madushka.prasad@gmail.com", "9304");
           gmail.connect();
           gmail.openFolder("INBOX");

           int totalMessages = gmail.getMessageCount();
           int newMessages = gmail.getNewMessageCount();

           System.out.println("Total messages = " + totalMessages);
           System.out.println("New messages = " + newMessages);
           System.out.println("-------------------------------");

           //gmail.printAllMessageEnvelopes();
           gmail.printAllMessages(); 

       } catch(Exception e) {
           e.printStackTrace();
           System.exit(-1);
       }

   }

});
       }

   }

}
Posted
Updated 13-Jun-11 23:46pm
v2

1 solution

ups - I forgot the link: Java Mail API Documentation (PDF)[^]

That one explains the Java Mail API best. See page 20 for your questions to be answered.

regards
Torsten
 
Share this answer
 
Comments
boss prabu 1-Jun-13 15:13pm    
Nice one... Thanks.. Even this might
http://www.compiletimeerror.com/2013/06/reading-email-using-javamail-api-example.html
help, have a look...

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900