Servlet 3.1 JavaMail 发送 HTML 电子邮件

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

环境配置

Servlet 发送带附件的电子邮件需要在计算机上安装 Sun Java Mail 、JavaMail API 和 Java Activation Framework)JAF)

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

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

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

下载并解压缩这些文件,找到 mail.jar 和 activation.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.