说明:1。本实例需要用到javamail-1.4.3和jaf-1_0_2-upd2。附件中有它们的下载,关于它们的介绍可以去google一下。
2。使用javaMail需要一个邮件服务器,我使用的是cmail,它很小,试用版的可以用于学习,按装之前请确保你装了IIS服务,因为它自带有一个.NET写的邮件服务。在下面附件中可以下载。
一:简单的邮件发送
<form action="SendText" method="post"> <table border="0" align="center" width="80%"> <tr> <td align="right">From:</td> <td> <input type="text" name="from"> </td> </tr> <tr> <td align="right">To:</td> <td> <input type="text" name="to"> </td> </tr> <tr> <td align="right">Subject:</td> <td> <input type="text" name="subject"> </td> </tr> <tr> <td align="right">Context:</td> <td> <textarea rows="5" cols="30" name="context"></textarea> </td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" value="发送"> </td> </tr> </table> </form>
Servlet如下:
/** * 使用javaMail发送简单的邮件 * * @author 张明学 * */ public class SendText extends HttpServlet { /** * */ private static final long serialVersionUID = 7107039219761248959L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("GBK"); String from = request.getParameter("from"); String to = request.getParameter("to"); String subject = request.getParameter("subject"); String context = request.getParameter("context"); // 发送的邮件服务器的地址 String mailServer = "PC200904071715";//按装cmail就是你的机器名 Properties prop = System.getProperties(); // 设置邮件的传输协议 prop.put("mail.transport.protocal", "smtp"); prop.put("mail.smtp.host", mailServer); prop.put("mail.smtp.port", "25"); // 是否通过验证;一般为true,false不能通过验证 prop.put("mail.smtp.auth", "false"); // 建立邮件发送的连接 // Session 类定义了一个基本邮件会话(session)。所有其它类都是经由这个session 才得以生效。 // Session 对象用 java.util.Properties 对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其它信息。 // Session类的构造器是私有的(private)。您可以得到单个缺省 session,它能用 getDefaultInstance() 方法被共享: // 或者,您还可以用 getInstance() 创建一个独立的 session: Session jmailSession = Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //需要邮件服务器的管理员账号与密码 return new PasswordAuthentication("admin", ""); } }); // 创建要发送的消息,这由 Message 类来完成。因为 Message 是个抽象类,必需用一个子类,多数情况下为 javax.mail.internet.MimeMessage。 Message jmailMessage = new MimeMessage(jmailSession); // 设置相关的邮件属性 try { // Address 确定信件地址,Address是个抽象类,用的是javax.mail.internet.InternetAddress // 若希望名字紧挨着电子邮件显示,也可以把它传递给构造器:jmailMessage.setFrom(new InternetAddress(from,"admin")); jmailMessage.setFrom(new InternetAddress(from)); /** * javax.mail.Message.RecipientType.TO:一对一的发送 * javax.mail.Message.RecipientType.CC:抄送 * javax.mail.Message.RecipientType.BCC:秘密抄送 */ jmailMessage.setRecipient(javax.mail.Message.RecipientType.TO,new InternetAddress(to)); // 用setSubject()方法设置 subject(主题) jmailMessage.setSubject(subject); jmailMessage.setSentDate(new Date()); // 使用 MimeMessage,而且消息是纯文本格式,您就可以用 setText() 方法,它只需要代表实际内容的参数,( MIME 类型缺省为 text/plain) jmailMessage.setText(context); // 邮件发送 // 消息发送的最后一部分是使用Transport类。这个类用协议指定的语言发送消息(通常是 SMTP)。它是抽象类,仅调用静态send()方法 Transport.send(jmailMessage); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } // request.getRequestDispatcher("ok.jsp").forward(request, response); response.sendRedirect("ok.jsp"); } }
HTML格式的邮件发送:
<form action="SendHtml" method="post"> <table border="0" align="center" width="80%"> <tr> <td align="right">From:</td> <td> <input type="text" name="from"> </td> </tr> <tr> <td align="right">To:</td> <td> <input type="text" name="to"> </td> </tr> <tr> <td align="right">Subject:</td> <td> <input type="text" name="subject"> </td> </tr> <tr> <td align="right">Context:</td> <td> <textarea rows="5" cols="30" name="context"></textarea> </td> </tr> <tr> <td align="right">格式:</td> <td> <select name="type"> <option value="text/plain">文本格式</option> <option value="text/html">HTML格式</option> </select> </td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" value="发送"> </td> </tr> </table> </form>
Servlet如下:
public class SendHtml extends HttpServlet { /** * */ private static final long serialVersionUID = -8794915632056125770L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("GBK"); String from = request.getParameter("from");// 发件人 String to = request.getParameter("to");// 收件人 String subject = request.getParameter("subject");// 主题 String context = request.getParameter("context");// 内容 String type = request.getParameter("type"); // 邮件服务器的地址 String mailServer = "PC200904071715"; // 设置邮件的传输协议信息 Properties transProp = System.getProperties(); // 邮件服务器地址 transProp.put("mail.smtp.host", mailServer); // 邮件传输协议中的接收协议:smtp transProp.put("mail.transport.protocol", "smtp"); // 是否通过验证 transProp.put("mail.smtp.auth", "true"); // 服务器端口 transProp.put("mail.smtp.port", "25");// 默认端口25 // 建立邮件发送的连接 javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance( transProp, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("admin", ""); } }); // 邮件信息载体 javax.mail.Message mailMessage = new javax.mail.internet.MimeMessage(mailSession); try { // 设置发件人 mailMessage.setFrom(new InternetAddress(from)); // 设置收件人 mailMessage.setRecipient(RecipientType.TO, new InternetAddress(to)); // 多个收件人设置 // InternetAddress[] addresss = new InternetAddress[]{new InternetAddress(to)}; // mailMessage.setRecipients(RecipientType.TO, addresss); // 设置主题 mailMessage.setSubject(subject); // 发送时间 mailMessage.setSentDate(new Date()); Multipart mp = new MimeMultipart(); MimeBodyPart mbp = new MimeBodyPart(); mbp.setContent(context, type+";charset=GB2312"); mp.addBodyPart(mbp); mailMessage.setContent(mp); javax.mail.Transport.send(mailMessage); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } response.sendRedirect("ok.jsp"); } }