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