Servlet 3.1 JavaMail 发送电子邮件
Java Servlet 使用 JavaMail API 可以发送电子邮件
环境配置
Servlet 发送带附件的电子邮件需要在计算机上安装 Sun Java Mail 、JavaMail API 和 Java Activation Framework)JAF)
-
可以从 Github 载最新版本的 JavaMail
-
可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)
-
可以从 下载最新版的 SUN JAVA MAIL 1.6.0
下载并解压缩这些文件,找到 mail.jar 和 activation.jar 文件,然后添加到 CLASSPATH 中
你也可以点击以下链接直接下载
下载完成后直接把它们添加到 CLASSPATH
范例
下面的范例将从我们的计算机上发送一封简单的电子邮件
我们假设你的 本地主机 已连接到互联网,并支持发送电子邮件
同时确保 Java Email API 包和 JAF 包的所有的 jar 文件在 CLASSPATH 中都是可用的
// author: 简单教程(www.twle.cn) // Copyright © 2015-2065 www.twle.cn. All rights reserved. package cn.twle.demo; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; import java.security.GeneralSecurityException; import javax.servlet.annotation.WebServlet; import com.sun.mail.util.MailSSLSocketFactory; @WebServlet(name = "SendEmailServlet", urlPatterns = {"send_mail"}) public class SendEmailServlet extends HttpServlet{ private String username = null; private String password = null; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 收件人的电子邮件 ID String to = "xxx@example.com"; // 发件人的电子邮件 ID String from = "xxx@example.com"; // 假设您是从本地主机发送电子邮件 String host = "smtp.qq.com"; // 获取系统的属性 Properties props = System.getProperties(); // 开启debug调试 props.setProperty("mail.debug", "true"); // 发送服务器需要身份验证 props.setProperty("mail.smtp.auth", "true"); // 设置邮件服务器主机名 props.setProperty("mail.host", "smtp.qq.com"); // 发送邮件协议名称 props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); username = "xxx"; password = "xxx"; //使用SSL,企业邮箱必需! //开启安全协议 MailSSLSocketFactory sf = null; try { sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); } catch (GeneralSecurityException e1) { e1.printStackTrace(); } props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); EmailAutherticator auth = new EmailAutherticator(); // 获取默认的 Session 对象 Session session = Session.getDefaultInstance(props,auth); // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try{ // 创建一个默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // 设置 From: header field of the header. message.setFrom(new InternetAddress(from)); // 设置 To: header field of the header. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置 Subject: header field message.setSubject("你好,这是一份简单的电子邮件!,来自简单教程(www.twle.cn)"); // 设置实际的邮件正文消息,内容大小不限 message.setText("简单教程(twle.cn),简单编程"); // 发送消息 Transport.send(message); String title = "发送简单的电子邮件 | 简单教程(www.twle.cn)"; String res = "成功发送电子邮件..."; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<title>" + title + "</title>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<p>" + title + "</p>\n" + "<p>" + res + "</p>\n" + "</body>"); }catch (MessagingException mex) { mex.printStackTrace(); } } /** * 验证账号密码 * 发送邮件必须的步骤 * @author Administrator * */ public class EmailAutherticator extends Authenticator { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } } }
在浏览器上输入 http://localhost:8080/servlet/send_mail 显示结果如下
然后就可以在邮件箱就能看到我们刚刚发送的邮件
发送给多个人
如果想要发送一封电子邮件给多个收件人,可以使用下面的方法来指定多个收件人
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
-
- type
- 这将被设置为 TO、CC 或 BCC 在这里,CC 代表抄送,BCC 代表密件抄送,例如 Message.RecipientType.TO
-
- addresses
- 这是电子邮件 ID 的数组。当指定电子邮件 ID 时,您需要使用 InternetAddress() 方法
用户身份认证
如果需要向电子邮件服务器提供用户 ID 和密码进行身份认证,可以设置如下属性:
props.setProperty("mail.user", "my_email_user"); props.setProperty("mail.password", "my_email_mypwd");