Java-Mail


Java-Mail

邮件发送

pojo实体类

 package com.kuang.pojo;
 ?
 import java.io.Serializable;
 ?
 public class User implements Serializable {
 ?
     private String username;
     private String password;
     private String email;
 ?
     public User() {
 ?
     }
 ?
     public User(String username, String password, String email) {
         this.username = username;
         this.password = password;
         this.email = email;
     }
 ?
     public String getUsername() {
         return username;
     }
 ?
     public void setUsername(String username) {
         this.username = username;
     }
 ?
     public String getPassword() {
         return password;
     }
 ?
     public void setPassword(String password) {
         this.password = password;
     }
 ?
     public String getEmail() {
         return email;
     }
 ?
     public void setEmail(String email) {
         this.email = email;
     }
 ?
     @Override
     public String toString() {
         return "User{" +
                 "username='" + username + '\'' +
                 ", password='" + password + '\'' +
                 ", email='" + email + '\'' +
                 '}';
     }
 }
 ?

注册服务器

 package com.kuang.servlet;
 ?
 import com.kuang.pojo.User;
 import com.kuang.utils.Sendmail;
 ?
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 ?
 public class RegisterServlet extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 ?
         response.setContentType("text/html;charset=utf-8");
         request.setCharacterEncoding("utf-8");
         response.setCharacterEncoding("utf-8");
         //接收用户请求,封装成对象
         String username = request.getParameter("username");
         String password = request.getParameter("password");
         String email = request.getParameter("email");
 ?
         User user = new User(username,password,email);
 ?
         //用户注册成功之后,给用户发送一封邮件
         //我们使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况;
         Sendmail send = new Sendmail(user);
         //启动线程,线程启动之后就会执行run方法来发送邮件
         send.start();
 ?
         //注册用户
         request.setAttribute("message", "注册成功,我们已经发了一封带了注册信息的电子邮件,请查收!如网络不稳定,可能过会儿才能收到!!");
         request.getRequestDispatcher("info.jsp").forward(request, response);
 ?
 ?
     }
 ?
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doGet(req, resp);
     }
 }
 ?

这里有一个提示页面:

info.jsp

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 
 
     Title
 
 
 

xxx网站温馨提示

 ${message}    

 

 

发送邮件

 package com.kuang.utils;
 ?
 import com.kuang.pojo.User;
 import com.sun.mail.util.MailSSLSocketFactory;
 ?
 import javax.mail.*;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import java.util.Properties;
 ?
 //网站三秒原则  : 用户体验
 //多线程实现用户体验 ! (异步处理)
 public class Sendmail extends Thread{
 ?
 ?
     //用于给用户发送邮件的邮箱
     private String from = "2724964601@qq.com";
     //邮箱的用户名
     private String username = "2724964601@qq.com";
     //邮箱的密码
     private String password = "qwiwmvzfuvxcdeij";
     //发送邮件的服务器地址
     private String host = "smtp.qq.com";
 ?
     private User user;
     public Sendmail(User user){
         this.user = user;
     }
 ?
     //重写run方法的实现,在run方法中发送邮件给指定的用户
     @Override
     public void run() {
         try{
             Properties prop = new Properties();
             prop.setProperty("mail.host", host);
             prop.setProperty("mail.transport.protocol", "smtp");
             prop.setProperty("mail.smtp.auth", "true");
 ?
             // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
             MailSSLSocketFactory sf = new MailSSLSocketFactory();
             sf.setTrustAllHosts(true);
             prop.put("mail.smtp.ssl.enable", "true");
             prop.put("mail.smtp.ssl.socketFactory", sf);
 ?
             //1、创建定义整个应用程序所需的环境信息的 Session 对象
             Session session = Session.getDefaultInstance(prop, new Authenticator() {
                 public PasswordAuthentication getPasswordAuthentication() {
                     //发件人邮件用户名、授权码
                     return new PasswordAuthentication("2724964601@qq.com", "qwiwmvzfuvxcdeij");
                 }
             });
 ?
             //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
             session.setDebug(true);
 ?
             //2、通过session得到transport对象
             Transport ts = session.getTransport();
 ?
             //3、使用邮箱的用户名和授权码连上邮件服务器
             ts.connect(host, username, password);
 ?
             //4、创建邮件
             MimeMessage message = new MimeMessage(session);
             message.setFrom(new InternetAddress(from)); //发件人
             message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); //收件人
             message.setSubject("用户注册邮件"); //邮件的标题
 ?
             String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!";
 ?
             message.setContent(info, "text/html;charset=UTF-8");
             message.saveChanges();
 ?
             //发送邮件
             ts.sendMessage(message, message.getAllRecipients());
             ts.close();
         }catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
 ?
 }

要求

 package com.kuang;
 ?
 public class Test {
 ?
     //简单邮件:没有附件和图片,纯文本邮件
     //复杂邮件:有附件和图片
 ?
     //要发送的邮件,需要获得协议和支持!开启服务POP3/SMTP服务
 ?
     //授权码: dztsimkumoavdfce
 }

执行类

 package com.kuang;
 ?
 ?
 ?
 import com.sun.mail.util.MailSSLSocketFactory;
 ?
 import javax.activation.DataHandler;
 import javax.activation.FileDataSource;
 import javax.mail.*;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 import java.util.Properties;
 ?
 //发送一封简单的邮件
 public class MailDemo01 {
 ?
     public static void main(String[] args) throws Exception {
         //简单邮件、没有附件、纯文本
         //复杂邮件,有附件
         Properties prop = new Properties();
         prop.setProperty("mail.host", "smtp.qq.com");//设置qq邮箱
         prop.setProperty("mail.transport.protocol", "smtp");//邮件发送协议
         prop.setProperty("mail.smtp.auth", "true");//需要验证用户密码
 ?
         //关于qq邮箱,还需要设置SSL加密,加上以下代码即可,大厂,其他邮箱不需要!
         MailSSLSocketFactory sf = new MailSSLSocketFactory();
         sf.setTrustAllHosts(true);
         prop.put("mail.smtp.ssl.enable", "true");
         prop.put("mail.smtp.ssl.socketFactory", sf);
 ?
         //使用java发送邮件5个步骤
 ?
         //1.创建定义整个应用程序所需要的环境信息的session对象
         //QQ才有 !其他邮箱就不用
         Session session = Session.getDefaultInstance(prop, new Authenticator() {
             @Override
             protected PasswordAuthentication getPasswordAuthentication() {
                 //发送人邮箱用户名、授权码
                 return new PasswordAuthentication("2724964601@qq.com", "qwiwmvzfuvxcdeij");
             }
         });
         //开启session的debug模式,这样可以查看程序发送email的状态
         session.setDebug(true);
 ?
         //2.通过session获取transport对象
 ?
         Transport ts = session.getTransport();
 ?
         //3.使用邮箱的用户名和授权码连接上邮箱服务器
 ?
         ts.connect("smtp.qq.com","2724964601@qq.com", "qwiwmvzfuvxcdeij");
 ?
         //4.创建邮件
         //注意需要传递Session:
         MimeMessage message = new MimeMessage(session);
 ?
         //指明邮件的发件人
         message.setFrom(new InternetAddress("2724964601@qq.com"));
         //指名邮件的收件人,现在发件人和收件人是一样的,就给自己发
         message.setRecipient(Message.RecipientType.TO, new InternetAddress("2724964601@qq.com"));
         //邮件标题
         message.setSubject("邮箱");
 ?
         //===============================================
 ?
         // 准备图片数据
         MimeBodyPart image=new MimeBodyPart();
         //图片需要经过数据处理...  DataHandler:数据处理
         DataHandler dh=new DataHandler(new FileDataSource("/Users/mac/IdeaProjects/功能拓展/mail-java/src/1.jpg"));
         image.setContent("这是一张带图片的正文","text/html;charset=UTF-8");
         image.setDataHandler(dh);//在我们的body中放入放图片数据
         image.setContentID("qj.png");//给图片设置一个ID,我们在后面可以使用!
 ?
         //拼装邮件正文内容
         MimeBodyPart text = new MimeBodyPart();
         text.setContent("这是一封邮件正文带图片","text/html;charset=UTF-8");
 ?
         //描述数据关系
         MimeMultipart mm = new MimeMultipart();
         mm.addBodyPart(text);
         mm.addBodyPart(image);
         mm.setSubType("related");
 ?
         //设置到消息中,保存修改
         message.setContent(mm);//把最后编辑好的邮件放到消息当中
         message.saveChanges();//保存修改
 ?
 ?
         //===============================================
 ?
         //5.发送邮件
 ?
         ts.sendMessage(message, message.getAllRecipients());
 ?
         //6.关闭
 ?
         ts.close();
 ?
     }
 ?
 }

注意:(这里要写前端页面)

 <%@ page contentType="text/html; UTF-8" language="java"  pageEncoding="UTF-8" %>
 
 
     注册
 
 
         
             用户名:
             密码:
             邮箱:
               
   ?  ?  

在web.xml中注册前端页面

 <?xml version="1.0" encoding="UTF-8"?>
 
 ?
     
         RegisterServlet
         com.kuang.servlet.RegisterServlet
     
     
         RegisterServlet
         /RegisterServlet.do