java left logo
java middle logo
java right logo
 

Home arrow Java ME Tips
 
 
Main Menu
Home
Java Tutorials
Book Reviews
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Java Network
Java Forums
Java Blog




Most Visited Tips
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Book Reviews
Top Rated Tips
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Book Reviews


Statistics
Registered Users: 4084
Java SE Tips: 614
Java ME Tips: 202
Java EE Tips: 183
Other API Tips: 779
Java Applications: 298
Java Libraries: 209
Java Games: 16
Book Reviews:
 
 
 
Recieving Email on J2ME devices E-mail
User Rating: / 17
PoorBest 

When you retrieve mail, you connect to a server that supports the Post Office Protocol, Version 3 (POP3) or Internet Message Access Protocol, Version 4 (IMAP4) protocol.Implement Email Client on device and interact with POP3/IMAP4 server through HTTP protocol, using servlet.

Example below demonstrate a simple email client on J2ME devices.

/*Midlet running on device*/
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.io.*;
import java.io.InputStream;
import java.io.PrintStream;


public class CheckMail extends MIDlet implements CommandListener {
    private String MAIL_SERVER_URL = 
            "http://localhost:8080/examples/servlet/CheckMailServlet?";
    private int MSG_LIST_SIZE = 5;
    Display display = null;
    List menu = null;
    List dmenu = null;
    TextBox input = null;
    String[] msgs = new String[MSG_LIST_SIZE];
    String user = null;
    
    int status = 0;
    Command backCommand = new Command("Back", Command.BACK, 0);
    Command submitCommand = new Command("Submit", Command.OK, 2);
    Command exitCommand = new Command("Exit", Command.STOP, 3);
    
    public CheckMail() { }
    
    public void startApp()  throws MIDletStateChangeException {
        display = Display.getDisplay(this);
        displayMenu();
    }
    
    public void pauseApp() { }
    
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
    
    public void commandAction(Command c,  Displayable d) {
        if(c == exitCommand ) {
            destroyApp(true);
        else if (c == backCommand) {
            handleBack();
        else if (c == submitCommand) {
            user = input.getString();
            retreiveMail(0null);
        else if (d == dmenu) {
            handleMainMenu();
        else if (d == menu) {
            handleMsgMenu();
        else
            loginUser();
    }
    
    /* Display Main Screen */
    private void displayMenu() {
        dmenu = new List("Check Email", Choice.IMPLICIT);
        if (user == null)
            dmenu.append("Login"null);
        else
            dmenu.append("Logout"null);
        dmenu.append("Check Mail"null);
        dmenu.addCommand(exitCommand);
        dmenu.setCommandListener(this);
        display.setCurrent(dmenu);
        status = 0;
    }
    
    /* This method takes users Mail ID and password*/
    private void loginUser() {
        input = new TextBox(
                "Enter Login Name/Password (Seperate by /) :"""25
                TextField.ANY);
        
        input.addCommand(submitCommand);
        input.addCommand(backCommand);
        input.setCommandListener(this);
        display.setCurrent(input);
    }
    
        /* This method retrieves Message with msgNum and
        if no MsgNum, displays the list of all msgs*/
    private void retreiveMail(int s, String msgNum) {
        
        String popURL = MAIL_SERVER_URL + "u=" + user;
        if (s == 0)
            popURL = popURL // Login
                    if (s == 1)
                        // List messages
                        popURL = popURL + "&s=" + msgNum + "&a=l"
                    else if (s == 2)
                        // Retreive message with i = msgNum
                        popURL = popURL + "&i=" + msgNum + "&a=r"
            
            StreamConnection c = null;
            InputStream is=null;
            StringBuffer sb = null;
            String err = null;
            
            try {
                c = (StreamConnection)Connector.open(popURL, 
                        Connector.READ_WRITE);
                
                is = c.openInputStream();
                int ch;
                sb = new StringBuffer();
                while ((ch = is.read()) != -1) {
                    sb.append((char)ch);
                }
            catch(Exception  ex){ err = ex.getMessage()finally {
                try {
                    if(is!= null) {is.close()}
                    if(c != null) {c.close()}
                catch(Exception exp) { err = exp.getMessage()}
            }
            
            if (err == null) {
                if (s == 0) {
                    user = sb.toString();
                    
                    if (user.indexOf("INVALIDUSR">= 0) {
                        user = null;
                        showAlert("Invalid User Name and Password");
                    else {
                        input = null;
                        dmenu = null;
                        displayMenu();
                    }
                else if (s == 1// For retreiving the list
                    showMList(sb.toString());
                else // s ==2, show Message
                    showMsg(sb.toString());
            else
                showAlert(err)// Need to Show Error Page
    }
    
    /* Display the selected Message*/
    private void showMsg(String msg) {
        StringBuffer buffer = new StringBuffer(200);
        int delim = 'ß';
        int j = msg.indexOf(delim);
        int i =0;
        
        // Get's FROM
        buffer.append(msg.substring(0,j ))
        for (int k=0;k<4;k++) {
            i = j+1;
            j = msg.indexOf(delim, i);
            // Get's TO, CC, Subject, Date
            buffer.append(msg.substring(i,j ))
        }
        // Rest of the Message
        buffer.append("\n" + msg.substring(j+))
        showAlert(buffer.toString());
    }
    
    /* Display Error On screen*/
    private void showAlert(String err) {
        Alert a = new Alert("");
        a.setString(err);
        a.setTimeout(Alert.FOREVER);
        display.setCurrent(a);
    }
    
    /* Display MessageList of User*/
    private void showMList(String msgStr) {
        for (int i=0;i<MAX_LIST_SIZE;i++) {
            msgs[i"";
        }
        menu = new List("Messages", Choice.IMPLICIT);
        int delim = 'ß';
        String sub = null;
        int i =0;
        int k = 0;
        int l =0;
        int j =msgStr.indexOf(delim);
        whilej >= 0) {
            sub = msgStr.substring(i,j);
            if ((k % 2== 0) {
                msgs[l= sub; // First would be Message Number
                l++;
            else
                menu.append(sub, null);
            k++;
            i = j + 1;
            j = msgStr.indexOf(delim, i);   // Rest of substrings
        }
        sub = msgStr.substring(i)// Last substring
        menu.append(sub, null);
        menu.addCommand(backCommand);
        menu.addCommand(exitCommand);
        menu.setCommandListener(this);
        status = 1;
        display.setCurrent(menu);
    }
    
    private void handleBack() {
        if (status == 1) {
            dmenu = null;
            displayMenu();
        else
            display.setCurrent(menu);
    }
    
    private void handleMainMenu() {
        int index = dmenu.getSelectedIndex();
        switch(index) {
            case :
                if (user != null) {
                    retreiveMail(1"0");
                    break;
                }
            case :
                status = 1;
                loginUser();
                break;
            case :
                break;
        }
    }
    
    private void handleMsgMenu() {
        int index = menu.getSelectedIndex();
        if (!msgs[index].equals("")) {
            retreiveMail(2, msgs[index])// Retreive Mail
        }
    }
}

/*Servlet communicating with Mail server*/
import java.io.*;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.mail.*;
import javax.mail.internet.MimeMessage;
import javax.servlet.*;
import javax.servlet.http.*;

public class CheckMailServlet extends HttpServlet {
    private static String  MSG_NOMAIL = "NOMAIL";
    private static String  MSG_INVALID_USER = "INVALIDUSR";
    private static String  MSG_CRITCAL_ERR = "UNEXPECTEDERROR";
    
    public CheckMailServlet() {
        String hostname = "yourserver.com"
                // Get system properties
                Properties props = System.getProperties();
        props.put("mail.pop3.host""hostname");
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("pop3");
    }
    
    /*Get the request parameters */
    protected void doGet(HttpServletRequest request, 
            HttpServletResponse responsethrows IOException {
        
        try {
            String action = request.getParameter("a");
            if(action == null)
                doLogin(request, response);
            else if(action.equals("r")) //retrieve
                doRetrieve(request, response);
            else if(action.equals("l")) //List
                doList(request, response);
        catch(Exception e) {
            PrintWriter writer = response.getWriter();
            writer.println(MSG_CRITCAL_ERR);
            writer.flush();
        }
    }
    
    protected void doPost(HttpServletRequest request, 
            HttpServletResponse responsethrows IOException {
        
        doGet(request, response);
    }
    
    /* performs login for user and returns status*/
    private void doLogin(HttpServletRequest request, 
            HttpServletResponse responsethrows ServletException, 
            IOException, MessagingException {
        
        String uid = request.getParameter("u");
        String pwd, tmpUID ;
        String responeStr = null;
        if ((uid == null|| (uid.equals("")) ) {
            responeStr = MSG_INVALID_USER;
        else {
            int j =uid.indexOf('/');
            if (j > 0) {
                tmpUID = uid.substring(0,j);
                pwd = uid.substring(j+1);
                if(login(tmpUID,pwd)) {
                    responeStr = tmpUID;
                    flag = true;
                else
                    responeStr = MSG_INVALID_USER;
            else
                responeStr = MSG_INVALID_USER;
        }
        PrintWriter writer = response.getWriter();
        writer.print(responeStr);
        writer.flush();
    }
    
    public boolean login(String uid, String pwd// login
    {
        store.connect(hostname,uid,pwd);
        if (store.isConnected()) {
            return true;
        else
            return false;
    }
    
    /* List all messages from Inbox*/
    private void doList(HttpServletRequest request, 
            HttpServletResponse responsethrows ServletException, 
            IOException, MessagingException {
        
        String uid = request.getParameter("u");
        String responeStr = "";
        MailLister lister = null;
        StringBuffer buffer = new StringBuffer(200);
        try {
            lister = getMailLister(uid);
        catch(Exception exp) {
            throw new ServletException(exp.getMessage());
        }
        if ( (lister != null&&  (lister.size() 0)) {
            Vector vect = lister.keys();
            int listSize =  vect.size();
            int endingNum = (listSize > 8(listSize - 80;
            for (int j = listSize-1; j>=endingNum; j--) {
                String curKey = (String)vect.elementAt(j);
                String msgString = (String)lister.get(curKey);
                if (j != endingNum)
                    buffer.appendcurKey + "ß" + msgString + "ß");
                else
                    buffer.append(curKey + "ß" + msgString);
            }
            responeStr =  buffer.toString();
        else
            responeStr = MSG_NOMAIL;
        PrintWriter writer = response.getWriter();
        writer.print(responeStr);
        writer.flush();
    }
    
    /* Stores all messages in Hashtable */
    private MailLister getMailLister(String uidthrows Exception {
        MailLister lister = null;
        int j =uid.indexOf('/');
        String ud;
        String pwd;
        if (j > 0) {
            ud = uid.substring(0,j);
            pwd = uid.substring(j+1);
            if(login(ud,pwd)) {
                // Open the Folder
                Folder folder = store.getDefaultFolder();
                if (folder == null) {
                    System.out.println("No default folder");
                    return null;
                }
                folder = folder.getFolder("INBOX");
                if (folder == null) {
                    System.out.println("Invalid folder");
                    return null;
                }
                folder.open(Folder.READ_ONLY);
                // Get directory
                Message message[] = folder.getMessages();
                lister = new MailLister()
                for (int i=0, n=message.length; i<n; i++) {
                    Message m = folder.getMessage(i);
                    lister.put(m,i);
                }
            else
                return lister;
        else
            return lister;
        return lister;
    }
    
    /* Retrieve Selected Mail from Inbox with msgID*/
    private void doRetrieve(HttpServletRequest request, 
            HttpServletResponse responsethrows ServletException, 
            IOException, MessagingException {
        
        String msgId = request.getParameter("i");
        String uid = request.getParameter("u");
        try {
            Message msg = getMessageFromStore(msgId, uid);
            if (msg == null)
                throw new ServletException(
                        "Could not Load the Message File");
            writeMessage(msg, request, response, uid, msgId);
        catch(Exception exp) {
            throw new ServletException(exp.getMessage());
        }
    }
    
    private String getMsgHeading(Message msgthrows Exception {
        StringBuffer buffer = new StringBuffer(300);
        buffer.append("From:");
        getAddressesList(msg.getFrom(), buffer);
        buffer.append("    To:");
        getAddressesList(
                msg.getRecipients(javax.mail.Message.RecipientType.TO)
                                  buffer);
        
        buffer.append("    Subject:");
        buffer.append(msg.getSubject());
        buffer.append("    Date:");
        buffer.append(msg.getSentDate());
        return buffer.toString();
    }
    
    /* This method gives the name and email of person*/
    private void getAddressesList(Address addresses[], StringBuffer buffer)
    throws Exception {
        String uName;
        String uEmail;
        if(addresses != null) {
            for(int i = 0; i < addresses.length; i++) {
                buffer.append(addresses[i";");
            }
        }
    }
    
    /* write Message according to MIME type and send to mobile screen*/
    protected void writeMessage(Message msg, HttpServletRequest request,
            HttpServletResponse response, String uid, String msgId)
            throws Exception {
        if(msg.isMimeType("multipart/*")) {
            Multipart multipart = (Multipart)msg.getContent();
            int msgPartCount = multipart.getCount();
            StringBuffer buffer = new StringBuffer(200);
            for(int i = 0; i < msgPartCount; i++) {
                Part p = multipart.getBodyPart(i);
                if (i == 0) {
                    buffer.append(getMsgHeading(msg));
                }
                if(p.isMimeType("text/plain")) {
                    String content = (String)p.getContent();
                    buffer.append(content.trim());
                else {
                    String filename = p.getFileName();
                    buffer.append(" ---  Has attachement " + filename);
                }
                if (i == (msgPartCount-1)) {
                    response.setContentType("text/plain");
                    PrintWriter writer = null;
                    writer = response.getWriter();
                    writer.print(removeExtraChar(buffer.toString()'\n'));
                    writer.flush();
                }
            }
        else if(msg.isMimeType("text/plain")) {
            printAscii(response, (String)msg.getContent() , msg);
        else // For HTML or another type of Content
        {
            writePart(msg, -1, response);
        }
    }
    
    private void printAscii(HttpServletResponse response, 
            String currentText, Message msg throws Exception {
        PrintWriter writer = response.getWriter();
        if (currentText.length() 1500)
            currentText = currentText.substring(0,1500);
        writer.print(getMsgHeading(msg+ currentText);
        writer.flush();
    }
    
    private Message getMessageFromStore(String msgUID, String uid
        throws Exception {
        
        MailLister lister = getMailLister(uid)
        if(lister != null) {
            return lister.get(msgUID);
        else
            return null;
    }
    
    private void writePart(Message msg, int partnr, 
            HttpServletResponse responsethrows Exception {
        
        Part p = msg;
        String responseStr ;
        if (p.isMimeType("text/html")) {
            String str = (String)p.getContent();
            if (str.length() 1500)
                str = str.substring(0,1500);
            responseStr = removeHTMLFormatting(str);
            responseStr = removeExtraChar(responseStr, '\n');
        else
            responseStr = "The MIME Type in which this mail exist is not"+
                          " supported on J2ME Phone";
        
        response.setContentType("text/plain");
        PrintWriter writer = response.getWriter();
        writer.print(getMsgHeading(msg+ responseStr);
        writer.flush();
    }
    
    private String removeHTMLFormatting(String str) {
        boolean insideTag = false;
        String token;
        StringBuffer buffer = new StringBuffer(200);
        StringTokenizer st = new StringTokenizerstr , "<>"true);
        whilest.hasMoreTokens() ) {
            token = st.nextToken();
            if token.equals"<" ) )
                insideTag = true;
            else if token.equals">" ) )
                insideTag = false;
            else if insideTag == false )
                buffer.appendtoken );
        }
        return buffer.toString();
    }
    
    private String removeExtraChar(String str, int delim) {
        StringBuffer buffer = new StringBuffer(200);
        // First substring
        int j =str.indexOf(delim);  
        int i = 0;
        whilej >= 0) {
            // Add some extra space
            buffer.append("    " + str.substring(i,j))
            i = j + 1;
            j = str.indexOf(delim, i);   // Rest of substrings
        }
        buffer.append(str.substring(i))// Last substring
        return buffer.toString();
    }
    
        /* This class stores all messages in Hashtable and retrieves them
                according to given key*/
    public class MailLister implements  java.io.Serializable {
        private Hashtable hash;
        private Vector vect;
        public MailLister() {
            vect = new Vector();
            hash = new Hashtable(vect.capacity());
        }
        
        public Object get(Object obj) {
            return hash.get(obj);
        }
        
        public void put(Object key, Object val) {
            if(!vect.contains(key))
                vect.insertElementAt(key, vect.size());
            hash.put(key, val);
        }
    }
    
}


 Related Tips

 
< Prev   Next >

Page 1 of 0 ( 0 comments )

You can share your information about this topic using the form below!

Please do not post your questions with this form! Thanks.


Name (required)


E-Mail (required)

Your email will not be displayed on the site - only to our administrator
Homepage(optional)



Comment Enable HTML code : Yes No



 
       
         
     
 
 
 
   
 
 
java bottom left
java bottom middle
java bottom right
RSS 0.91 FeedRSS 1.0 FeedRSS 2.0 FeedATOM FeedOPML Feed

Home - About Us - Privacy Policy
Copyright 2005 - 2008 www.java-tips.org
Java is a trademark of Sun Microsystems, Inc.