Java实现邮件发送功能

目录

一、准备工作

 二、简易文本邮件发送的实现

2.1 步骤

2.2 代码 

三、复杂文件内容的发送

3.1 文件构成解析

 3.2 包含图片的发送

3.3 包含附件的发送

 四、实战

4.1 jsp动态页面

4.2 实体类POJO

4.3 Servlet

4.4 注册Servlet

4.5 发送邮箱核心类


一、准备工作

1、jar包支持:mail.jar和activation.jar

2、授权码的获取

 二、简易文本邮件发送的实现

2.1 步骤

1、创建Session对象

2、创建Transport对象

3、使用邮箱的用户名和授权码连上邮箱服务器

4、创建一个Message对象(需要传递session)

        message需要指明发件人、收件人以及文件内容

5、发送邮件

6、关闭连接

2.2 代码 

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 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发送邮件的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();}
}

三、复杂文件内容的发送

3.1 文件构成解析

每一个文本、图片、附件可以分为一个MimeBodyPart,最后由MimeMultipart完成组装

 

 3.2 包含图片的发送

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 MailDemo02 {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发送邮件的5个步骤//1.创建定义整个应用程序所需要的环境信息的session对象Session session=Session.getDefaultInstance(prop, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("11927XXX@qq.com","授权码");}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect("smtp.qq.com","11927XXX@qq.com","授权码");//4.创建邮件:写文件//注意需要传递sessionMimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress("11927XXX@qq.com"));//指明邮件的收件人message.setRecipient(Message.RecipientType.TO,new InternetAddress("11927XXX@qq.com"));//邮件标题message.setSubject("java发出");//邮件的文本内容//=================================准备图片数据=======================================MimeBodyPart image=new MimeBodyPart();//图片需要经过数据化的处理DataHandler dh=new DataHandler(new FileDataSource("D:\\Bert\\1594126632(1).jpg"));//在part中放入这个处理过图片的数据image.setDataHandler(dh);//给这个part设置一个ID名字image.setContentID("bz.jpg");//准备正文的数据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();}
}

3.3 包含附件的发送

import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;public class MailDemo03 {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发送邮件的5个步骤//1.创建定义整个应用程序所需要的环境信息的session对象Session session=Session.getDefaultInstance(prop, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("1192XXXX@qq.com","授权码");}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect("smtp.qq.com","1192XXXX@qq.com","授权码");//4.创建邮件:写文件//注意需要传递sessionMimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress("1192XXXX@qq.com"));//指明邮件的收件人message.setRecipient(Message.RecipientType.TO,new InternetAddress("1192XXXX@qq.com"));//邮件标题message.setSubject("java发出");//邮件的文本内容//=================================准备图片数据MimeBodyPart image=new MimeBodyPart();//图片需要经过数据化的处理DataHandler dh=new DataHandler(new FileDataSource("D:\\Bert\\1594126632(1).jpg"));//在part中放入这个处理过图片的数据image.setDataHandler(dh);//给这个part设置一个ID名字image.setContentID("bz.jpg");//=================================准备正文数据MimeBodyPart text=new MimeBodyPart();text.setContent("这是一张正文<img src='cid:bz.jpg'>","text/html;charset=UTF-8");//=================================准备附件数据MimeBodyPart body1= new MimeBodyPart();body1.setDataHandler(new DataHandler(new FileDataSource("D:\\Bert\\cmd.txt")));body1.setFileName("1.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();}
}

 四、实战

4.1 jsp动态页面

index.jsp

<html>
<body>
<h2>Hello World!</h2>
<form action="${pageContext.request.contextPath}/RegisterServlet.do" method="post">用户名:<input type="text" name="username">密码:<input type="text" name="pwd">邮箱:<input type="text" name="email"><input type="submit" value="注册"></form>
</body>
</html>

4.2 实体类POJO

public class User {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 + '\'' +'}';}
}

4.3 Servlet

import cn.csn.MailDemo01.pojo.User;
import cn.csn.MailDemo01.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 {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username=req.getParameter("username");String password=req.getParameter("pwd");String email=req.getParameter("email");User user=new User(username,password,email);Sendmail send=new Sendmail(user);send.start();System.out.println("success");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}

4.4 注册Servlet

绑定路径

<servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>cn.csn.MailDemo01.servlet.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/RegisterServlet.do</url-pattern></servlet-mapping>

4.5 发送邮箱核心类

可放在utils目录下

import cn.csn.MailDemo01.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="XXX@qq.com";private String host="smtp.qq.com";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,"授权码");}});//开启session的debug模式,这样可以查看到程序发送Email的运行状态session.setDebug(true);//2.通过session得到transport对象Transport ts=session.getTransport();//3.使用邮箱的用户名和授权码连上邮件服务器ts.connect(host,from,"授权码");//4.创建邮件:写文件//注意需要传递sessionMimeMessage message=new MimeMessage(session);//指明邮件的发件人message.setFrom(new InternetAddress(from));//指明邮件的收件人message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail()));//邮件标题message.setSubject("注册通知");//邮件的文本内容message.setContent("恭喜你("+user.getUsername()+")成功注册!"+"密码:"+user.getPassword(),"text/html;charset=UTF-8");//5.发送邮件ts.sendMessage(message,message.getAllRecipients());//6.关闭连接ts.close();}catch (Exception e){System.out.println(e);}}
}

 此处引入多线程的目的是提高用户的体验,防止因发送文件时间过长,导致前端响应过久。

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

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

相关文章

深度学习模型训练的主要流程(不定时更新中)

1.数据收集导入 1.1.数据收集获取 1.2.数据集导入 2.数据预处理数据基本处理特征工程 2.1.数据基本处理 2.1.数据可视化 2.2.缺失值/异常值处理…

快速创建一个vue项目并运行

前期准备工作: 1.安装node 2.安装npm 3.设置淘宝镜像 4.全局安装webpack 5.webpack 4.X 开始&#xff0c;需要安装 webpack-cli 依赖 6.全局安装vue-cli 正文开始: 1.创建项目 ,回车 vue init webpack vue-svg > Project name vue-demo 项目名称 回车 > Pro…

harmonyOS next之实现时间打卡定时器

需求&#xff1a;实现一个时间打卡签到按钮。 实现方法&#xff1a;每隔一秒钟获取一下当前时间。 实现代码如下&#xff1a; Column(){Text(this.curTime).fontColor(#FFFFFF).fontWeight(600).fontSize(32vp)Text(上班打卡).fontColor(#FFFFFF) } .width(170vp) .height(170…

⭐️苹果电脑安装windows10双系统【详细图文步骤保姆级教程】【本教材适用于MAC台式机、笔记本MacBook air和pro】

苹果电脑安装windows10双系统【详细图文步骤保姆级教程】【本教材适用于MAC台式机、笔记本MacBook air和pro】 苹果电脑安装windows10双系统一、准备工作准备项1&#xff1a;U盘作为系统安装盘准备项2&#xff1a;您需要安装的系统镜像 二、启动转换助理步骤1&#xff1a;找到启…

【CSS in Depth 2 精译_050】7.3 CSS 响应式设计中的流式布局原则(Fluid layout)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第七章 响应式设计】&#xff08;概述&#xff09; 7.1 移动端优先设计原则&#xff08;上篇&#xff09; 7.1.1 创建移动端菜单&#xff08;下篇&#xff09;7.1.2 给视口添加 meta 标签&#xf…

人脸识别系统-特征算法

人脸识别是目前人工智能领域中成熟较早、落地较广的技术之一&#xff0c;广泛应用于手机解锁、支付验证、安防布控等多个领域。其核心在于通过特定的算法识别图像或视频中人脸的身份&#xff0c;这一过程的实现离不开特征算法的支持。以下是对人脸识别特征算法的详细介绍&#…

Dockerfile样例

一、基础jar镜像制作 ## Dockerfile FROM registry.openanolis.cn/openanolis/anolisos:8.9 RUN mkdir /work ADD jdk17.tar.gz fonts.tar.gz /work/ RUN yum install fontconfig ttmkfdir -y && yum clean all && \chmod -R 755 /work/fonts ADD fonts.conf …

git 更改分支名字

1. 重命名当前分支 如果你想重命名当前所在的分支&#xff1a; git branch -m 新分支名 例如&#xff0c;把当前分支改名为 new-branch-name&#xff1a; git branch -m new-branch-name 2. 重命名其他分支 如果想重命名非当前所在的分支&#xff0c;可以指定旧分支名和新分…

玛哈特矫平机:引领制造业平整技术的新篇章

玛哈特矫平机&#xff1a;引领制造业平整技术的新篇章 在制造业的广阔舞台上&#xff0c;材料的平整度是确保产品质量与精度的关键要素。玛哈特矫平机&#xff0c;凭借其出色的性能和前沿技术&#xff0c;正逐步成为推动制造业发展的重要驱动力。 技术的飞跃与创新的引领 玛…

《Sui区块链:重塑去中心化应用的新星与未来潜力》

目录 引言 一、Sui 1、 技术架构 2、 编程语言 3、Move起源 4、Move的几个关键点&#xff1a; 5、Move 智能合约编程语言 6、智能合约编程语言可以做什么 7、和其他编程语言有什么不同 8、 安全性 9、开发者体验 10、生态系统 11、 未来发展 总结 引言 在区块链技…

llama大模型中,为什么推理部分使用kv cache,而训练部分不使用kv cache

在 LLaMA 等大语言模型中&#xff0c;推理和训练过程在使用 KV (Key-Value) Cache 上存在差异的主要原因可以归结为计算效率和内存使用的不同需求。 1. KV Cache 在推理中的作用 在推理阶段&#xff0c;模型通常是逐步生成输出&#xff08;如一个词或一个标记 token 一次&…

vue后台管理系统从0到1(5)

文章目录 vue后台管理系统从0到1&#xff08;5&#xff09;完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1&#xff08;5&#xff09; 接上一期&#xff0c;我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见&#xff0c;这一个侧边栏是符合我们…

Linux驱动开发——platform平台总线

bus_type 一、主要作用 设备管理 bus_type负责管理连接在特定总线上的设备。它维护一个设备链表&#xff0c;其中包含了所有注册到该总线上的设备。通过这个链表&#xff0c;内核可以方便地遍历和管理连接在该总线上的设备。例如&#xff0c;对于 PCI 总线&#xff0c;bus_typ…

无人机之视觉技术篇

一、视觉传感器的类型 摄像头&#xff1a; 最常见的视觉传感器&#xff0c;能够捕捉可见光图像和视频。 通过单目、双目或多目摄像头的组合&#xff0c;无人机能够实现立体视觉&#xff0c;从而估算距离、深度&#xff0c;并进行物体识别和追踪。 红外传感器&#xff1a; …

银行卡二三四要素验证接口-在线银行卡二三四要素验证-银行卡二三四要素验证API

接口简介&#xff1a;全面覆盖&#xff0c;支持所有带银联标识的银行卡; 高准确性-验证结果实时返回&#xff0c;准确率达99%; 银行卡二要素若是手机号卡号&#xff0c;不支持工商和农商行 接口地址&#xff1a;https://www.wapi.cn/api_detail/102/235.html 在线核验&#xff…

【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制

文章目录 前言1. CPU提供的栈机制2. push指令3. 问题4. 问题的分析与解答5. pop指令结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深…

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

英伟达开源最新大模型Nemotron 70B后,只有OpenAI o1一个对手了

来源 | 机器之心 今天&#xff0c;英伟达又开源了一个性能超级强大的模型 —— Llama-3.1-Nemotron-70B-Instruct&#xff0c;它击败了 OpenAI 的 GPT-4o 和 Anthropic 的 Claude-3.5 Sonnet 等多个开闭源模型。 从命名来看&#xff0c;显然 Llama-3.1-Nemotron-70B-Instruct …

2024.09.27校招 实习 内推 面经

&#x1f6f0;️ &#xff1a;neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招丨小米2024届补录招聘正式回归&#xff08;内推&#xff09; 校招丨小米2024届补录招聘正式回归&#xff08;内推&#xff09; 2、校招丨移动研究院2025届校园招聘全面启…

DE项目整里

系列文章目录 文章目录 系列文章目录一、Airflow-AWS ETL项目二、snowflake ETL项目三、AWS DE的快速入门课程 一、Airflow-AWS ETL项目 项目作者&#xff1a;tuplespectra&#xff08;主要是AWS&#xff0c;EC2&#xff0c;GLUE 的项目&#xff09;项目地址&#xff1a; htt…