Servlet 3.1 JavaMail 发送 HTML 电子邮件

Java Servlet 使用 JavaMail API 可以发送 HTML 电子邮件

环境配置

Servlet 发送带附件的电子邮件需要在计算机上安装 Sun Java MailJavaMail APIJava Activation Framework)JAF)

  1. 可以从 Github 载最新版本的 JavaMail

  2. 可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)

  3. 可以从 下载最新版的 SUN JAVA MAIL 1.6.0

下载并解压缩这些文件,找到 mail.jaractivation.jar 文件,然后添加到 CLASSPATH 中

你也可以点击以下链接直接下载

  1. JavaMail mail.jar 1.6.0

  2. JAF activation-1.1.1.jar

  3. SUN JavaMail 1.6.0

下载完成后直接把它们添加到 CLASSPATH

范例

下面的范例将从我们的计算机上发送一封 HTML 电子邮件

我们假设你的 本地主机 已连接到互联网,并支持发送电子邮件

同时确保 Java Email API 包和 JAF 包的所有的 jar 文件在 CLASSPATH 中都是可用的

我们使用 setContent() 方法来设置第二个参数为 "text/html;charset=UTF-8" 的内容,该参数用来指定 HTML 内容是包含在消息中的

// 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 = "SendEmailHTMLServlet", urlPatterns = {"send_mail_html"}) 
public class SendEmailHTMLServlet 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("你好,这是一份 HTML 邮件!,来自简单教程(www.twle.cn)");

         // 设置实际的 HTML 消息,内容大小不限
         message.setContent("<h1>简单教程(twle.cn),简单编程</h1>",
                            "text/html;charset=UTF-8" );
         // 发送消息
         Transport.send(message);

         String title = "发送 HTML 电子邮件 | 简单教程(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_html 显示结果如下

然后就可以在邮件箱就能看到我们刚刚发送的邮件

用户身份认证

如果需要向电子邮件服务器提供用户 ID 和密码进行身份认证,可以设置如下属性:

props.setProperty("mail.user", "my_email_user");
props.setProperty("mail.password", "my_email_mypwd");
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.