Servlet 3.1 JavaMail 发送电子邮件

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

环境配置

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

范例

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

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

同时确保 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");
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

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

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