javaweb 网站邮件发送 javaMail

news/2024/5/20 23:22:25/文章来源:https://blog.csdn.net/m0_46392290/article/details/113111584

我们这里是使用qq邮箱来演示邮件的发送,需要先对qq邮箱先进行一些设置。在设置-账户我需要开启这个pop3协议,他会生成一个授权码。

在这里插入图片描述
常用的邮件传输协议有2种:POP3/SMTP、IMAP/SMTP。

POP和IMAP的区别:在邮箱客户端的操作,比如移动邮件、标记已读,如果使用POP,是不会同步到邮箱服务器上的;如果使用IMAP,这些操作会同步到邮箱服务器上。
发送使用SMTP协议,接受使用POP3协议。
这是我们还需要准备 activation-1.1.1 , mail-1.4.7 我们需要准备这连个jar包。

简单邮件发送

1.定义整个应用程序所需要的环境信息(Session对象的)
2.创建session对象
3.通过session对象获取transport对象
4.使用邮件用户连接邮箱服务器
5.创建邮箱
6.发送邮箱、关闭连接

创建一个普通的java项目,把上面那两个jar导入。在这里插入图片描述

创建一个普通的java项目,写好main方法在这里插入图片描述

我们需要执行第一步 定义整个应用程序所需要的环境信息。这些都是固定不变。

Properties properties = new Properties();properties.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器properties.setProperty("mail.transport.protocol","smtp");//邮件发送协议properties.setProperty("mail.smtp.auth","true");//需要验证用户名

由于qq浏览器的独特我们需要给他添加上SSL认证。

 //qq邮箱,还要设置SSL加密,加上一下代码即可,大厂MailSSLSocketFactory sf= new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable","true");properties.put("mail.smtp.ssl.scoketFactory", sf);

第二步 创建session对象
普通的邮箱 Session session = Session.getDefaultInstance(properties);这样写就可以了,而qq邮箱需要一些信息认证

 Session session = Session.getDefaultInstance(properties, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("发件人邮箱", "授权码");}});

第三步 通过session获取transport对象 改对象是获取连接邮箱服务器的。

Transport transport = session.getTransport();

第四步 连接邮箱服务器

transport.connect("smtp.qq.com","发件人邮箱","授权码");

第五步 写邮件
写邮件就是把这里面的信息补全。
在这里插入图片描述
收件人、主题、内容这是必须要写的。
我们这些新都会存在MimeMsessage对象里面。

//这里需要进行传入sessionMimeMessage mimeMessage = new MimeMessage(session);//指明发送邮件人mimeMessage.setFrom(new  InternetAddress("发件人的邮箱"));//指明邮件收件人 收件人可以填写多个mimeMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("收件人邮箱"));//邮件主题mimeMessage.setSubject("javamail");//邮件内容mimeMessage.setContent("<h1 style='color : red' >你好</h1>","text/html;charset=utf-8");

第六步 发送邮件、关闭连接

transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
transport.close();

在这里插入图片描述

复杂邮箱发送

什么是复杂的邮箱呢?言外之意就是给这个邮件添加上图片和附件。
我们仍样遵循上面简单邮箱的步骤走,他们两个不同的地方在写邮件的时候不同,我们需要通过这张图来进行分析他们的分布位置。
我们可以看到纯文本(正常的文本)超文本(图片),这里的内嵌资源其实就是说的是把文本和超文本合并在一起看成文本,然后在和附件进行合并。

在这里插入图片描述
MimeBodyPart MimeMultipart 在写代码之前我们需要先了解这两个类,
MimeBodyPart他是MimeMultipart的子类,MimeBodyPart里面是写文本和超文本的 类型为alternative或related,MimeMultipart相当于一个大的容器他里面可以添加多个MimeBodyPart对象。

public static void main(String[] args) throws Exception {Properties properties = new Properties();properties.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器properties.setProperty("mail.transport.protocol","smtp");//邮件发送协议properties.setProperty("mail.smtp.auth","true");//需要验证用户名//qq邮箱,还要设置SSL加密,加上一下代码即可,大厂MailSSLSocketFactory sf= new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable","true");properties.put("mail.smtp.ssl.scoketFactory", sf);//javaMail 五个步骤//1.创建定义整个应用程序所需的环境信息Session对象//只有qq邮箱有用Session session = Session.getDefaultInstance(properties, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("发件人邮箱", "授权码");}});// 开启Session的debug模式,这样可以查看Emil发送的状态session.setDebug(true);//2.通过Session得到transport对象Transport transport = session.getTransport();//3.使用邮箱用户连接邮箱服务器transport.connect("smtp.qq.com","发件人邮箱","授权码");//写邮件 我们把他单独写成了一个方法 这里需要注意的给他传参数MimeMessage mimeMessage=getMimeMessage(session);//5.发送邮件transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//6.关闭transport.close();}private static MimeMessage getMimeMessage(Session session) throws Exception {//这些是写邮件的固定部分//这里需要进行传入sessionMimeMessage mimeMessage = new MimeMessage(session);//指明发送邮件人mimeMessage.setFrom(new InternetAddress("发件人邮箱"));//指明邮件收件人mimeMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("收件人邮箱"));//邮件主题mimeMessage.setSubject("javamail");//        邮件的内容 正文 图片 附件  MimeBodyPart//正文 MimeBodyPart mimeBodyPart1 = new MimeBodyPart();mimeBodyPart1.setContent("背景图片<img src='cid:bj.jpg'>","text/html;charset=utf-8");//图片MimeBodyPart mimeBodyPart2 = new MimeBodyPart();//DataHandler进行数据处理mimeBodyPart2.setDataHandler(new DataHandler(new FileDataSource("D:\\java\\fileupload\\mailtest\\src\\5c78f3f44f03241b.jpg")));mimeBodyPart2.setContentID("bj.jpg");//设置ID//附件 同样我们的附件可以添加多个 就是多new MimeBodyPart()MimeBodyPart mimeBodyPart3 = new MimeBodyPart();mimeBodyPart3.setDataHandler(new DataHandler(new FileDataSource("D:\\java\\fileupload\\mailtest\\lid\\c3p0-0.9.5.5.jar")));mimeBodyPart3.setFileName("c3p0.jar");//这里设置的是FileName//拼接邮件内容 文本和图片 形成内嵌资源MimeMultipart mimeMultipart1 = new MimeMultipart();mimeMultipart1.addBodyPart(mimeBodyPart1);mimeMultipart1.addBodyPart(mimeBodyPart2);mimeMultipart1.setSubType("related");//文本和图片的嵌入//将拼接好的内容设置成正文内容MimeBodyPart mimeBodyPartImgeText = new MimeBodyPart();mimeBodyPartImgeText.setContent(mimeMultipart1);// 正文与附件进行拼接MimeMultipart mimeMultipart2 = new MimeMultipart();mimeMultipart2.addBodyPart(mimeBodyPartImgeText);mimeMultipart2.addBodyPart(mimeBodyPart3);mimeMultipart2.setSubType("mixed");//正文和附件 设置类型为mixed//放到message中mimeMessage.setContent(mimeMultipart2);mimeMessage.saveChanges();//保存修改return mimeMessage;}

在这里插入图片描述

补充说明一下 开启Session的debug模式,这样可以查看Emil发送的状态 session.setDebug(true);在这里插入图片描述

网站注册

首先是我们创建以web项目,把所用到的jar进行导入,因为我们需要走tomcat所以我们需要在tomcat下lib目录添加mail-1.1.47 ,activation-1.1.1两个jar。 同时我们还需要在java下创建三个包pojo存放实体类、servlet存放servlet、utils存放工具类

在这里插入图片描述
在这里插入图片描述
现在我们开始写jsp,先写一个表单,我们要写完整他的type name……

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

然后写一个servlet来接收,在写之前我们应该先把用到的实体类写出来,就是User类在pojo包中 ,我们给这类添加了Serializable接口,让他可序列化。

package aw.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;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +", email='" + email + '\'' +'}';}
}

现在开始写servlet

@WebServlet(name = "RegisterServlet",urlPatterns = {"/Register.do"})
public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {//接收参数request.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);//写邮件

我们这里写邮件单独写一个工具类在utils下,我们这里是使用类线程,这样是为了避免网站访问人过多,导致延时等待,其他邮件发送和简单邮箱一样。

package aw.utils;import aw.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;public class Sendmail  extends Thread{//用户给用发送邮件的邮箱private String from="2331890842@qq.com";//邮件的用户名private String username="2331890842@qq.com";//邮件密码 /授权码private  String password="bezsbrqgdqicecff";//接受用户信息private User user;public Sendmail(User user){this.user=user;}//在run中写发送给邮件的制定用户@Overridepublic void run() {try {Properties properties = new Properties();properties.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器properties.setProperty("mail.transport.protocol","smtp");//邮件发送协议properties.setProperty("mail.smtp.auth","true");//需要验证用户名//qq邮箱,还要设置SSL加密,加上一下代码即可,大厂MailSSLSocketFactory sf= null;sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable","true");properties.put("mail.smtp.ssl.scoketFactory", sf);//javaMail 五个步骤//1.创建定义整个应用程序所需的环境信息Session对象//只有qq邮箱有用Session session = Session.getDefaultInstance(properties, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(from, password);}});//开启Session的debug模式,这样可以查看Emil发送的状态session.setDebug(true);//2.通过Session得到transport对象Transport transport = session.getTransport();//3.使用邮箱用户连接邮箱服务器transport.connect("smtp.qq.com",from,password);//4.写邮件//这里需要进行传入sessionMimeMessage mimeMessage = new MimeMessage(session);//指明发送邮件人mimeMessage.setFrom(new InternetAddress(from));//指明邮件收件人  这里的收件人是从网站中获取的mimeMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail()));//邮件主题mimeMessage.setSubject("javamail web ");//邮件内容String info="恭喜注册成功,用户名:"+user.getUsername()+",密码:"+user.getPassword();mimeMessage.setContent(info,"text/html;charset=utf-8");//5.发送邮件transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//6.关闭transport.close();} catch (Exception e) {e.printStackTrace();}}
}

先在我们在补全servlet

package aw.servlet;import aw.pojo.User;
import aw.utils.Sendmail;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(name = "RegisterServlet",urlPatterns = {"/Register.do"})
public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {request.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 sendEmail = new Sendmail(user);sendEmail.start();//注册用户request.setAttribute("message","邮件以发送,请耐心等待");request.getRequestDispatcher("info.jsp").forward(request,response);
//        response.sendRedirect("info.jsp");}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完结撒花 有不懂的评论留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_833147.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站图片延时加载

为什么80%的码农都做不了架构师&#xff1f;>>> 当你看到网页上有很多图片&#xff0c;会不会感觉加载速度超慢&#xff0c;甚至有砸电脑的冲动&#xff1f;其实&#xff0c;我们可以优先加载肉眼能够看到的图片&#xff0c;当用户拖动滚动条时&#xff0c;再加载其…

在线绘图网站

https://www.freedgo.com/

【百度地图API】——国内首款团购网站的地图插件

原文:【百度地图API】——国内首款团购网站的地图插件摘要&#xff1a; 本文介绍了一款应用在团购网站上的地图插件&#xff0c;适用于目前非常流行的团购网站。使用这款地图插件&#xff0c;无需任何编程技术&#xff0c;你就把商家的位置轻松地标注在地图上。 前台地址 http:…

电商网站接入快递查询

网页跳转格式 适用场景&#xff1a;在管理后台中&#xff0c;订单列表点击显示快递详情 和 订单详情页显示快递详情&#xff0c;使用 iframe 嵌入该URL http://www.kuaidi100.com/chaxun?com快递名称&#xff08;可以中文英文&#xff09;&nu快递单号 快递名称&#xff1a…

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning 2015/05/28 10:570x00 识别涉及技术 验证码识别涉及很多方面的内容。入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足。 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过…

ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

首先提出一个问题&#xff1a;在做网站开发的时候&#xff0c;用到了验证码来防止恶意提交表单&#xff0c;那么要如何实现当验证码错误时&#xff0c;只是刷新一下验证码&#xff0c;而其它填写的信息不改变&#xff1f; 先说一下为什么有这个需求&#xff1a;以提交注册信息页…

高并发量网站解决方案

2019独角兽企业重金招聘Python工程师标准>>> 一个小型的网站&#xff0c;可以使用最简单的html静态页面就实现了&#xff0c;配合一些图片达到美化效果&#xff0c;所有的页面均存放在一个目录下&#xff0c;这样的网站对系统架构、性能的要求都很简单。随着互联网业…

Docker -- 2 -- 利用docker部署网站和数据库

在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录。 这次就利用docker进行一次真正的实例使用&#xff0c;使用docker搭建一个简单的答题系统&#xff0c;这个系统是当时做来给网络安全周做手机答题的系统&#xff0c;很简单&#xff…

《淘宝店铺 大数据营销+SEO+爆款打造 一册通》一一2.1 生意参谋平台概述

本节书摘来自异步社区出版社《淘宝店铺 大数据营销SEO爆款打造 一册通》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;葛存山 , 耿寿礼&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 第2章 生意参谋——大数据分析利器 淘宝店铺 大数据…

[资源推荐] 必须收藏的两个查找论文和代码实现的网站!

参考自&#xff1a;https://juejin.im/post/5c57f86c51882562002aec03 无论是研究方向是 AI 方面的学生&#xff0c;或者是做机器学习方面的算法工程师&#xff0c;在掌握基础的机器学习相关知识后&#xff0c;都必须掌握搜索论文的技能&#xff0c;特别是研究或者工作领域方向…

再陷风波 Equifax又一门户网站被曝安全漏洞

近日&#xff0c;美信用机构Equifax被证实公司在今年5月到7月期间&#xff0c;遭到黑客攻击&#xff0c;导致约有1.43亿用户数据遭到泄露。现在&#xff0c;又一个Equifax门户网站被指出存在安全协议问题。 据最先发现问题的Hold Security LLC指出&#xff0c;一个来自阿根廷名…

ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证

上章节我们已经定制好动态配置的菜单&#xff0c;用户登录网站的第一步就是进入首页内容&#xff0c;那我们先搭建一下我们的首页内容。想着自己的网站内容主要是个人博客类型&#xff0c;所以&#xff0c;首页就展示博主本人的一些基本信息吧&#xff0c;哈哈。当然&#xff0…

Java裸写爬虫技术,运用多线程技术,高效爬取某个医疗机构网站数据

最近喜欢上了数据的庞大的感觉&#xff0c;就爬取了一下某个医疗机构网站医疗数据&#xff0c;由于数据量庞大&#xff0c;只爬取了江西省的各个市的各个医院的各个科室的各个科室。中各种信息。其中用的持久层技术是hibernate框架&#xff0c;和用到一些ioc技术。话不多说&…

解决登录同一个网站,连接失败

2019独角兽企业重金招聘Python工程师标准>>> 程序报错 MaxRetryError: HTTPConnectionPool(host127.0.0.1, port53742): Max retries exceeded with url: /session/7e0b607f-022e-4464-9eb3-461844f59b84/window/maximize (Caused by NewConnectionError(<urllib…

Awesome 书籍源码论文软件下载网站整理

software.informerAAAI会议论文下载Packt出版商的书籍开源代码&#xff0c;目前已经超过6600个仓库

在IIS管理器添加网站

1.添加物理路径 2.跨域问题解决方案 A.点击所创网站出现如图所示&#xff0c;双击HTTP响应标头 B.右键–“添加”&#xff0c;添加以下2条&#xff1a; Access-Control-Allow-Headers&#xff1a;Content-Type, api_key, Authorization Access-Control-Allow-Origin&#xf…

超全Inventor 3d模型素材网站整理

家人们&#xff0c;最近我找到了一个很好用的Inventor 3d模型免费素材网站 本人曾经也是废大把时间寻找资源&#xff0c;质量还不咋地&#xff0c;但是通过朋友安利&#xff0c;知道了一个很好的网站&#xff1a;爱给网&#xff0c;里面资源内容丰富&#xff0c;并且可以一键下…

良心安利电梯过道su模型素材网站

电梯过道su模型类资源应该算是素材类网站中必不可少的资源类型了吧~今天给大家推荐超好用&#xff0c;免费质量高的素材噢&#xff0c;让你坐拥海量资源同时又不撞款&#xff01; 免费资源最多&#xff0c;又全面的&#xff0c;那就是 爱给网啦&#xff01; 它有很多素材&…

宝藏又小众的灯饰装修设计素材网站分享

今天小编针对灯饰装修设计素材为大家整理了很多内容哦&#xff0c;肯定有需要的小伙伴吧&#xff0c;实用、免费、优质的素材谁又不心动呢&#xff01;赶紧码住&#xff01; 免费资源最多&#xff0c;又全面的&#xff0c;那就是 爱给网啦&#xff01; 它有很多素材&#xff0…

超全教育cc0高清摄影图片素材网站整理

天天各大网站找教育cc0高清摄影图片素材&#xff1f;最后空手而归&#xff1f;今天为大家推荐教育cc0高清摄影图片素材网站&#xff0c;质量上乘适合资源慌缺的你&#xff0c;话不多说准备开始收藏吧&#xff01; 接下来就给大家介绍一下我珍藏已久的网站&#xff0c;我的工作…