Java/Servlets/Email

Материал из Java эксперт
Перейти к: навигация, поиск

Email Bean

   <source lang="java">

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.jexp.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("

The INBOX folder does not yet contain any email messages.

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

"); } } catch (Exception exc) { out
.println("

Sorry, an error occurred while accessing the email messages.

");
     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()
           + "
"); } out.println("Message received on: " + msg.getReceivedDate() + "
"); out.println("Message content type: " + msg.getContentType() + "
"); out.println("Message content type: " + (String) msg.getContent()); } else { out
.println("

The received email message was not of a text content type.

");
   }
 }//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;
 }

}

      </source>
   
  
 
  



Java servlet application

Mail Accessor

   <source lang="java">

import java.io.IOException; import java.io.PrintWriter; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.sun.corba.se.impl.protocol.giopmsgheaders.Message; public class MailAccessor extends HttpServlet {

 private final static String DEFAULT_SERVER = "mail.attbi.ru";
 public void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, java.io.IOException {
   response.setContentType("text/html");
   java.io.PrintWriter out = response.getWriter();
   out.println("<html><head><title>Email Reader</title></head><body>");
   handleMessages(request, out);
   out.println("</body></html>");
   out.close();
 } //doGet
 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 = MailAccessor.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("

The INBOX folder does not yet contain any email messages.

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

"); } } catch (Exception exc) { out
.println("

Sorry, an error occurred while accessing the email messages.

");
     out.println(exc.toString());
   } finally {
     try {
       if (folder != null)
         folder.close(false);
       if (popStore != null)
         popStore.close();
     } catch (Exception e) {
     }
   }
 }//printMessages
 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()
           + "
"); } out.println("Message content type: " + msg.getContentType() + "
"); out.println("Message body content: " + (String) msg.getContent()); } else { out
.println("

The received email message was not of a text content type.

");
   }
 }//displayMessage
 private boolean check(String value) {
   if (value == null || value.equals(""))
     return false;
   return true;
 }

}

      </source>
   
  
 
  



Sending e-mail by using the JavaMail API and JDBC

   <source lang="java">

import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; import java.sql.*; import javax.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class SendMailBean {

 private Connection con = null;
 protected String username;
 public String getPasswordAndEmailAddress() {
   //load email from database
   String password = "Password";
   String email = "Email";
   emailPassword(email, username, password);
 }
 public void emailPassword(String email, String memberName, String password) {
   String host = "mail";
   String from = "w@j.ru";
   Properties props = System.getProperties();
   props.put("mail.smtp.host", host);
   Session session = Session.getDefaultInstance(props, null);
   MimeMessage message = new MimeMessage(session);
   try {
     message.setFrom(new InternetAddress(from));
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
     message.setSubject("Password Reminder");
     message.setText("Hi " + memberName + ",\nYour password is: " + password + "\nregards - "
         + from);
     Transport.send(message);
   } catch (AddressException ae) {
   } catch (MessagingException me) {
   }
 }

}

</source>
   
  
 
  



Sending E-Mail from Servlets

Servlet and email

   <source lang="java">

import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.rmi.transport.Transport; import com.sun.corba.se.impl.protocol.giopmsgheaders.Message; public class EmailServlet extends HttpServlet {

 //default value for mail server address, in case the user
 //doesn"t provide one
 private final static String DEFAULT_SERVER = "mail.attbi.ru";
 public void doPost(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, java.io.IOException {
   String smtpServ = DEFAULT_SERVER;
   String from = "jexp@yourserver.ru";
   String to = "yourname@yourserver.ru";
   String subject = "subject line";
   String emailContent = "emailContent";
   response.setContentType("text/html");
   java.io.PrintWriter out = response.getWriter();
   out
       .println("<html><head><title>Email message sender</title></head><body>");
   try {
     sendMessage(smtpServ, to, from, subject, emailContent);
   } catch (Exception e) {
     throw new ServletException(e.getMessage());
   }
out.println("

The message was sent successfully

");
   out.println("</body></html>");
 } //doPost
 private void sendMessage(String smtpServer, String to, String from,
     String subject, String emailContent) 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", smtpServer);
   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 (emailContent != null)
       mailMsg.setText(emailContent);
     //Finally, send the meail message; throws a "SendFailedException"
     //if any of the message"s recipients have an invalid adress
     Transport.send(mailMsg);
   } catch (Exception exc) {
     throw exc;
   }
 }//sendMessage
 public void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, java.io.IOException {
   doPost(request, response);
 }

}//EmailServlet


      </source>