EmailBean.java Source code

Java tutorial

Introduction

Here is the source code for EmailBean.java

Source

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class EmailBean {

    //defaults
    private final static String DEFAULT_CONTENT = "Unknown content";

    private final static String DEFAULT_SUBJECT = "Unknown subject";

    private static String DEFAULT_SERVER = null;

    private static String DEFAULT_TO = null;

    private static String DEFAULT_FROM = null;
    static {
        java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com.java2s.mailDefaults");

        DEFAULT_SERVER = bundle.getString("DEFAULT_SERVER");
        DEFAULT_TO = bundle.getString("DEFAULT_TO");
        DEFAULT_FROM = bundle.getString("DEFAULT_FROM");

        System.out.println("DEFAULT_SERVER: " + DEFAULT_SERVER);
    }

    //JavaBean properties
    private String smtpHost;

    private String to;

    private String from;

    private String content;

    private String subject;

    public void sendMessage() throws Exception {

        Properties properties = System.getProperties();

        //populate the 'Properties' object with the mail
        //server address, so that the default 'Session'
        //instance can use it.
        properties.put("mail.smtp.host", smtpHost);

        Session session = Session.getDefaultInstance(properties);

        Message mailMsg = new MimeMessage(session);//a new email message

        InternetAddress[] addresses = null;

        try {

            if (to != null) {

                //throws 'AddressException' if the 'to' email address
                //violates RFC822 syntax
                addresses = InternetAddress.parse(to, false);

                mailMsg.setRecipients(Message.RecipientType.TO, addresses);

            } else {

                throw new MessagingException("The mail message requires a 'To' address.");

            }

            if (from != null) {

                mailMsg.setFrom(new InternetAddress(from));

            } else {

                throw new MessagingException("The mail message requires a valid 'From' address.");

            }

            if (subject != null)
                mailMsg.setSubject(subject);

            if (content != null)
                mailMsg.setText(content);

            //Finally, send the mail message; throws a 'SendFailedException'
            //if any of the message's recipients have an invalid address
            Transport.send(mailMsg);

        } catch (Exception exc) {

            throw exc;

        }

    }//sendMessage

    private void handleMessages(HttpServletRequest request, PrintWriter out) throws IOException, ServletException {

        HttpSession httpSession = request.getSession();
        String user = (String) httpSession.getAttribute("user");
        String password = (String) httpSession.getAttribute("pass");
        String popAddr = (String) httpSession.getAttribute("pop");

        Store popStore = null;
        Folder folder = null;

        if (!check(popAddr))
            popAddr = EmailBean.DEFAULT_SERVER;

        try {

            if ((!check(user)) || (!check(password)))
                throw new ServletException("A valid username and password is required to check email.");

            Properties properties = System.getProperties();

            Session session = Session.getDefaultInstance(properties);

            popStore = session.getStore("pop3");

            popStore.connect(popAddr, user, password);

            folder = popStore.getFolder("INBOX");

            if (!folder.exists())
                throw new ServletException("An 'INBOX' folder does not exist for the user.");

            folder.open(Folder.READ_ONLY);

            Message[] messages = folder.getMessages();
            int msgLen = messages.length;

            if (msgLen == 0)
                out.println("<h2>The INBOX folder does not yet contain any email messages.</h2>");

            for (int i = 0; i < msgLen; i++) {
                displayMessage(messages[i], out);
                out.println("<br /><br />");
            }

        } catch (Exception exc) {

            out.println("<h2>Sorry, an error occurred while accessing the email messages.</h2>");
            out.println(exc.toString());

        } finally {
            try {
                if (folder != null)
                    folder.close(false);

                if (popStore != null)
                    popStore.close();
            } catch (Exception e) {
            }
        }
    }//handleMessages

    private void displayMessage(Message msg, PrintWriter out) throws MessagingException, IOException {

        if (msg != null && msg.getContent() instanceof String) {

            if (msg.getFrom()[0] instanceof InternetAddress) {
                out.println(
                        "Message received from: " + ((InternetAddress) msg.getFrom()[0]).getAddress() + "<br />");
            }
            out.println("Message received on: " + msg.getReceivedDate() + "<br />");
            out.println("Message content type: " + msg.getContentType() + "<br />");
            out.println("Message content type: " + (String) msg.getContent());
        } else {

            out.println("<h2>The received email message was not of a text content type.</h2>");

        }

    }//displayMessage

    public void setSmtpHost(String host) {
        if (check(host)) {
            this.smtpHost = host;
        } else {
            this.smtpHost = EmailBean.DEFAULT_SERVER;
        }
    }//setTo

    public void setTo(String to) {
        if (check(to)) {
            this.to = to;
        } else {
            this.to = EmailBean.DEFAULT_TO;
        }
    }//setTo

    public void setFrom(String from) {
        if (check(from)) {
            this.from = from;
        } else {
            this.from = EmailBean.DEFAULT_FROM;
        }
    }//setFrom

    public void setContent(String content) {
        if (check(content)) {
            this.content = content;
        } else {
            this.content = EmailBean.DEFAULT_CONTENT;
        }
    }//setContent

    public void setSubject(String subject) {
        if (check(subject)) {
            this.subject = subject;
        } else {
            this.subject = EmailBean.DEFAULT_SUBJECT;
        }
    }//setSubject

    private boolean check(String value) {

        if (value == null || value.equals(""))
            return false;

        return true;
    }
}