本文分两部分:
1.源码部分:
package com.qiu;
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.security.GeneralSecurityException;
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);
//使用javamail的五个步骤
//1.创建定义整个应用程序所需的环境信息的session对象
//创建定义整个应用程序所需的环境信息的Session对象
Session session=Session.getDefaultInstance(prop, new Authenticator() {
@Override
//qq才有,其他邮箱就不用
protected PasswordAuthentication getPasswordAuthentication() {
//发送人邮件用户名,授权码
return new PasswordAuthentication("[email protected]","zvebnyyhhqsybjjj");
}
});
//开启session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2.通过session得到transport对象session.getTransport();
Transport ts = session.getTransport();
//3.使用邮箱的用户名和授权码连上邮件服务器
ts.connect("[email protected]","zvebnyyhhqsybjjj");
//4.创建邮箱:写邮件
//注意需要传递Session
MimeMessage message = new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress("[email protected]"));
//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO,new InternetAddress("[email protected]"));
message.setSubject("欢迎来到小邱的世界!");//邮件主题
/*简单的邮件发送方式
message.setContent("你好呀","text/html;charset=UTF-8"); //邮件文本
*/
/*
复杂的邮件发送方式
*/
MimeBodyPart image = new MimeBodyPart();
//图片需要经过数据处理,DataHandler:数据处理
DataHandler dh = new DataHandler(new FileDataSource("E:\\ideaProjects\\bz.jpg"));
image.setDataHandler(dh);//在我们的Body主体中放入这个处理的图片数据
image.setContentID("bz.jpg");//给图片设置一个ID我们在后面可以使用
//准备正文数据
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是一封带邮件正文的图片<img src='cid:bz.jpg'>的邮件","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();
}
}
2.项目实战部分(含源码):
源码部分:
pojo_User:
package com.qiu.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 + '\'' +
'}';
}
}
servlet_RegisterServlet:
package com.qiu.servlet;
import com.qiu.pojo.User;
import com.qiu.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 req, HttpServletResponse resp) throws ServletException, IOException {
//接受用户请求,封装成对象
//脚手架
String username = req.getParameter("username");
String password = req.getParameter("password");
String email = req.getParameter("email");
User user = new User(username, password, email);
//用户注册成功后给用户发丝一封邮件
//我们使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况
Sendmail send = new Sendmail(user);
send.start();
//注册用户
req.setAttribute("message","注册成功,我们已经发送一份带了注册信息的电子邮件,请查收,如果遇到网络不稳定,可能会延迟接受");
req.getRequestDispatcher("info.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
utils_Sendmail:
package com.qiu.utils;
import com.qiu.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;
import lombok.SneakyThrows;
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.security.GeneralSecurityException;
import java.util.Properties;
import java.util.Properties;
//网站三秒原则:用户体验
//多线程实现用户体验!异步处理
public class Sendmail extends Thread {
//用于用户发送邮件的邮箱
private String from="[email protected]";
//邮箱的用户名
private String username = "[email protected]";
//邮箱的密码
private String password = "zvebnyyhhqsybjjj";
//发送邮件的服务器地址
private String host = "smtp.qq.com";
private User user;
public Sendmail(User user){
this.user=user;
}
//重写run方法的实现,在run方法中发送邮件给指定的用户
@SneakyThrows
@Override
public void run() {
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);
//使用javamail的五个步骤
//1.创建定义整个应用程序所需的环境信息的session对象
//创建定义整个应用程序所需的环境信息的Session对象
Session session=Session.getDefaultInstance(prop, new Authenticator() {
@Override
//qq才有,其他邮箱就不用
protected PasswordAuthentication getPasswordAuthentication() {
//发送人邮件用户名,授权码
return new PasswordAuthentication("[email protected]","zvebnyyhhqsybjjj");
}
});
//开启session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2.通过session得到transport对象session.getTransport();
Transport ts = session.getTransport();
//3.使用邮箱的用户名和授权码连上邮件服务器
ts.connect("[email protected]","zvebnyyhhqsybjjj");
//4.创建邮箱:写邮件
//注意需要传递Session
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();
//5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
//6.关闭链接
ts.close();
}
}