[ Team LiB ] |
![]() ![]() |
Recipe 20.2 Sending Email from a ServletProblemYou want to send emails from a servlet. SolutionImport the javax.mail and javax.mail.internet packages at the top of the servlet source code. Create a sendMessage( ) method (or a method with a different name) that can be called from the servlet methods doGet( ) or doPost( ). DiscussionThe sendMessage( ) method in Example 20-1 uses the JavaMail API to connect with a mail server, construct an email message, and then send that message to one or more recipients. The servlet obtains the various components of an email—the target email address, the sender's address, the subject field, and the email's body content—from request parameters. The servlet can handle a form submitted by a client using a web browser.
Example 20-1 calls the sendMessage( ) method from the service method doPost( ). The sendMessage( ) method parameters comprise the parts of an email: the SMTP server, the recipient of the email (the variable to), the "from" address of the sender, the email subject, and the email's content. Example 20-1. A servlet sends email based on request parameter valuespackage com.jspservletcookbook; import java.io.IOException; import java.io.PrintWriter; import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; import javax.servlet.*; import javax.servlet.http.*; 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.com"; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //obtain the values for email components from //request parameters String smtpServ = request.getParameter("smtp"); if (smtpServ == null || smtpServ.equals("")) smtpServ = DEFAULT_SERVER; String from = request.getParameter("from"); String to = request.getParameter("to"); String subject = request.getParameter("subject"); String emailContent = request.getParameter("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( "<h2>The message was sent successfully</h2>"); 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 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 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //doGet( ) calls doPost( )... doPost(request, response); }//doGet }//EmailServlet The servlet interacts with a mail server in the following manner:
See AlsoThe Sun Microsystems JavaMail API page: http://java.sun.com/products/javamail/; Recipe 20.1 on adding JavaMail-related JARs to your web application; Recipe 20.3 on sending email using a JavaBean; Recipe 20.4 covering how to access email in a servlet; Recipe 20.5 on accessing email with a JavaBean; Recipe 20.6 on handling attachments in a servlet; Recipe 20.7 on adding attachments to an email message; Recipe 20.8 on reading an email's headers. |
[ Team LiB ] |
![]() ![]() |