邮件发送

1.邮件发送原理图

2.jar包的支持

  1. mail-1.4.7.jar
  2. activation-1.1.1.jar

3.授权码的获取

4.简易文本邮件发送的实现

5、实现步骤

  1. 创建session对象
  2. 创建Transport对象
  3. 使用邮箱的用户名和授权码连上邮件服务器
  4. 创建一个Message对象(需要传递session)message需要指明发件人、收件人以及文件内容
  5. 发送邮件
  6. 关闭连接

代码实现:

package com.kk;import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;public class MailDemo01 {public static void main(String[] args) throws GeneralSecurityException, MessagingException {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发送邮件的5个步骤//1.创建定义整个应用程序所需要的环境信息的session对象Session session=Session.getDefaultInstance(prop, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("xxxx@qq.com","授权码");}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect("smtp.qq.com","xxxx@qq.com","授权码");//4.创建邮件:写文件//注意需要传递sessionMimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress("xxxx@qq.com"));//指明邮件的收件人message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxxx@qq.com"));//邮件标题message.setSubject("邮件发送");//邮件的文本内容message.setContent("你好啊!","text/html;charset=UTF-8");//5.发送邮件ts.sendMessage(message,message.getAllRecipients());//6.关闭连接ts.close();}
}

6、复杂文件内容的发送

5.1文件构成解析:

MIME(多用途互联网邮件扩展类型)

​ 除了邮件内容部分,其他的部分代码往往是相同的,除了需要根据不同的邮箱运营商编写不同的配置代码外。邮件内容也被分为很多个部分,由文件、图片、附件等构成,编写邮件内容的过程,类似于积木的拼接,另外值得注意的是文本内容一般为HTML的格式发送。
​ 每一个文本、图片、附件可以分为一个MimeBodyPart,由MimeMultipart完成组装

5.2包含图片的发送

代码实现:

package com.kk;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 MailDemo02 {public static void main(String[] args) throws GeneralSecurityException, MessagingException {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发送邮件的5个步骤//1.创建定义整个应用程序所需要的环境信息的session对象Session session=Session.getDefaultInstance(prop, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("xxxx@qq.com","授权码");}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect("smtp.qq.com","xxxx@qq.com","授权码");//4.创建邮件:写文件//注意需要传递sessionMimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress("xxxx@qq.com"));//指明邮件的收件人message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxxx@qq.com"));//邮件标题message.setSubject("邮件发送");//邮件的文本内容//=================================准备图片数据=======================================MimeBodyPart image=new MimeBodyPart();//图片需要经过数据化的处理  DataHandler数据处理    FileDataSource 加载文件资源DataHandler dh=new DataHandler(new FileDataSource("E:\\javaweb\\uploadfile\\mail-java\\src\\1.png"));image.setDataHandler(dh); //在我们的Body中放入这个处理的图片数据image.setContentID("kk.jpg"); //给这个图片设置一个ID名字,方便后面使用//准备正文的数据MimeBodyPart text=new MimeBodyPart();//设置(new)一个文本域用于放置文本text.setContent("这是一封带图片的邮件<img src='cid:kk.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();}
}

5.3包含附件的发送

代码实现

package com.kk;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 MailDemo03 {public static void main(String[] args) throws GeneralSecurityException, MessagingException {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发送邮件的5个步骤//1.创建定义整个应用程序所需要的环境信息的session对象Session session=Session.getDefaultInstance(prop, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("3066686488@qq.com","kytmehgqlhaidcid");}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect("smtp.qq.com","3066686488@qq.com","kytmehgqlhaidcid");//4.创建邮件:写文件//注意需要传递sessionMimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress("3066686488@qq.com"));//指明邮件的收件人message.setRecipient(Message.RecipientType.TO,new InternetAddress("3066686488@qq.com"));//邮件标题message.setSubject("邮件发送");//邮件的文本内容//=================================准备图片数据=======================================MimeBodyPart image=new MimeBodyPart();//图片需要经过数据化的处理  DataHandler数据处理    FileDataSource 加载文件资源DataHandler dh=new DataHandler(new FileDataSource("E:\\javaweb\\uploadfile\\mail-java\\src\\1.png"));image.setDataHandler(dh); //在我们的Body中放入这个处理的图片数据image.setContentID("kk.jpg"); //给这个图片设置一个ID名字,方便后面使用//准备正文的数据MimeBodyPart text=new MimeBodyPart();//设置(new)一个文本域用于放置文本text.setContent("这是一封带文本、图片、附件的邮件<img src='cid:kk.jpg'>","text/html;charset=UTF-8");
//
//        //描述数据关系
//        MimeMultipart mm=new MimeMultipart();
//        mm.addBodyPart(text);
//        mm.addBodyPart(image);
//        mm.setSubType("related");
//        //设置到消息中,保存修改
//        message.setContent(mm);//把最后编辑好的文件放到消息当中
//        message.saveChanges();//保存修改!//=================================准备图片数据=======================================//=================================准备附件数据=======================================MimeBodyPart body1= new MimeBodyPart();body1.setDataHandler(new DataHandler(new FileDataSource("E:\\javaweb\\uploadfile\\mail-java\\src\\kk.txt")));body1.setFileName("kk.txt");//描述数据关系MimeMultipart mm=new MimeMultipart();mm.addBodyPart(body1);mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("mixed");//设置到消息中,保存修改message.setContent(mm);message.saveChanges();//=================================准备附件数据=======================================//5.发送邮件ts.sendMessage(message,message.getAllRecipients());//6.关闭连接ts.close();}
}

7、通过Tomcat实现(使用多线程实现)

1、实体类User

package com.kk.pojo;import java.io.Serializable;//序列化//import lombok.AllArgsConstructor;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//  可以使用这个lombok自动生成
//@Data
//@AllArgsConstructor
//@NoArgsConstructor
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;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +", email='" + email + '\'' +'}';}}

2、Servlet类

package com.kk.servlet;import com.kk.pojo.User;
import com.kk.util.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 {@Overrideprotected void doPost(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);//启动线程,线程启动之后就会执行run方法来发送邮件send.start();//给前端加文字req.setAttribute("message","注册成功,我们已经发了一封带了注册信息的电子邮件,请查收!如网络不稳定,可能待会才能收到!!!");req.getRequestDispatcher("info.jsp").forward(req,resp);System.out.println("success");}
}

3、Util类

package com.kk.util;import com.kk.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;//网站3秒原则:用户体验
//多线程实现用户体验!  异步处理
public class Sendmail extends Thread{//用于用户发送邮件的邮箱private String from="3066686488@qq.com";//邮箱的用户名private String username="3066686488@qq.com";//邮箱密码private String password="kytmehgqlhaidcid";//发送邮件的服务器地址private String host="smtp.qq.com";//调用pojo层private User user;public Sendmail(User user){this.user=user;}@Overridepublic void run() {try {Properties prop=new Properties();prop.setProperty("mail.host",host);///设置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发送邮件的5个步骤//1.创建定义整个应用程序所需要的环境信息的session对象Session session= Session.getDefaultInstance(prop, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//发件人的邮件用户名,授权码return new PasswordAuthentication(from,host);}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect(host,username,password);//4.创建邮件:写文件//注意需要传递sessionMimeMessage 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();}catch (Exception e){System.out.println("注册失败");}}
}

4、JSP页面

注册页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h2>Hello World!</h2>
<form action="${pageContext.request.contextPath}/RegisterServlet.do" method="post">用户名:<input type="text" name="username">密码:<input type="text" name="password">邮箱:<input type="text" name="email"><input type="submit" value="注册"></form>
</body>
</html>

info页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>xx网站温馨提示!</h1>
${message}
</body>
</html>

5、xml页面

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>com.kk.servlet.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/RegisterServlet.do</url-pattern></servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>WebMail</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- https://mvnrepository.com/artifact/javax.servlet/jstl --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies></project>

JavaWeb邮件发送相关推荐

  1. Javaweb(邮件发送)

    目录 1.电子邮件 1.传输协议 SMTP协议 POP3协议 2.邮箱原理理解 2.java发送邮件 概述 发送普通邮件 发送图片邮件 发送带附件的邮件 3.javaweb写邮件 4.SpringBo ...

  2. javaWeb邮件发送原理及实现

    1.简单邮件发送 在这里插入图片描述 1.1引入依赖 1.2代码实现 //发送一封简单的邮件 public class MailDemo01 {public static void main(Stri ...

  3. 邮件发送 --- 纯Java、JavaWeb、Spring三种实现方式

    邮件发送学习笔记~ 一.邮件发送介绍 要在网络上实现邮件功能,必须要有专门的邮件服务器! 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中! ...

  4. 77.【JavaWeb文件上传和邮件发送04】

    JavaWeb (二十五).文件上传 1.准备工作 2.实用类介绍 3.思维导图: 4.正戏开始 5.完整代码 (二十六).邮箱发送 1.邮箱发送的原理: 2.服务器的原理 3.下载两个jar包 4. ...

  5. 邮件发送-JavaWeb

    邮件发送 邮件发送所依赖的协议 SMTP协议(发送邮件) SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议.SMTP是建 ...

  6. javaweb邮件的在线发送

    javaweb邮件的在线发送 本示例都写在了jsp页面中,读者可以把它转移到.java文件中,  这样可以减轻jsp页面的负担,更易于管理. 在做之前,需要导包 代码示例; <span styl ...

  7. JavaWeb(三):java和javaWeb实现邮件发送

    JavaWeb-实现邮件发送 学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV12J41137hu?p=1 学习资料笔记:csdn dream_F ...

  8. 【狂神说】JavaWeb笔记整理 | SMBMS项目 | 文件上传和邮件发送

    目录 JavaWeb 1.基本概念 1.1 概念 1.2 web应用程序: 1.3 静态web 1.4 动态web 2.web服务器 2.1 技术讲解 2.2 web 服务器 3. Tomcat 3. ...

  9. JavaMail邮件发送,网页、客户端详解-JavaWeb学习6.9

    JavaMail邮件发送 JavaMail发送邮件 笔记 导入mail.jar包 eclipse编写时的目录 网页上发送邮件 采用qq邮箱和网易邮箱 代码 客户端发送邮箱 客户端采用foxmail 服 ...

最新文章

  1. linux c 监控文件内容改变,如何让程序监视C ++中的文件修改?
  2. 远程手机测试机房的建立
  3. 第九天2017/04/18(4、非虚继承、虚继承的本质 / sizeof)
  4. 在vc2005中使用MoveWindow()调整控件大小,不能及时刷新,在vc6中则可以
  5. Spark之Master主备切换机制原理
  6. 64位ubuntu安装交叉编译器出现的问题。nuc972工程中的问题
  7. 开启市场新格局 且看新华三计算与存储新品发布会
  8. 量子计算机接口,量子计算机接口架构设计与研究
  9. 不会部署并调试SpringBoot源码?一看必会IDEA操作
  10. js弹出框、对话框、提示框、弹窗总结
  11. linux oracle 分号引起大错误
  12. 手把手教你给电脑安装manjaroLinux操作系统
  13. Vue图片放大镜插件
  14. aria2最新tracker服务器,Aria2自动更新BT Tracker服务器列表的方法
  15. 高级会计职称计算机考什么,会计高级职称考哪些科目
  16. ubuntu 18.04 install tensorflow-nightly-gpu and tfp-nightly
  17. excel sumifs多条件求和
  18. Windows错误码
  19. ZOJ 4062 Plants vs. Zombies 2018 ICPC 青岛站 E Plants vs. Zombies
  20. 和老BIOS说永别 EFI BIOS技术解析

热门文章

  1. 一行一行分析JQ源码学习笔记-03
  2. 利用dex2jar反编译apk
  3. 解决服务器被黑上不了网的问题
  4. 软件开发中的V字模型与W模型(使开发与侧试分离)
  5. C语言小于n的素数,关于求N以内素数的一点小问题(N小于一亿)
  6. 学了java然后深入_JAVA8学习——从源码角度深入Stream流(学习过程)
  7. 解决Scrapy-Redis爬取完毕之后继续空跑的问题
  8. 【疑点】当子元素全部浮动时,怎么解决父元素塌陷的问题?
  9. IntelliJ idea 创建Web项目后web文件夹下没有WEB-INF的解决方法
  10. Nginx网站根目录更改及导致403 forbidden的问题解决