Java/Servlets/Email
Содержание
- 1 Email Bean
- 2 The INBOX folder does not yet contain any email messages.
- 3 Sorry, an error occurred while accessing the email messages.
- 4 The received email message was not of a text content type.
- 5 Java servlet application
- 6 Mail Accessor
- 7 The INBOX folder does not yet contain any email messages.
- 8 Sorry, an error occurred while accessing the email messages.
- 9 The received email message was not of a text content type.
- 10 Sending e-mail by using the JavaMail API and JDBC
- 11 Sending E-Mail from Servlets
- 12 Servlet and email
- 13 The message was sent successfully
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(".println("
"); } } catch (Exception exc) { out
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() + ".println("
"); } out.println("Message received on: " + msg.getReceivedDate() + "
"); out.println("Message content type: " + msg.getContentType() + "
"); out.println("Message content type: " + (String) msg.getContent()); } else { out
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(".println("
"); } } catch (Exception exc) { out
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() + ".println("
"); } out.println("Message content type: " + msg.getContentType() + "
"); out.println("Message body content: " + (String) msg.getContent()); } else { out
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>