Mime协议发送邮件

2024-06-08 00:58
文章标签 协议 mime 邮件 发送

本文主要是介绍Mime协议发送邮件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在myeclipse中的java程序如果要想发送一个邮件的话就必须导入mail.jar与activation.jar。但是在javaee中的13中技术就集成了这两个jar包。所以不用导入。

public class JavaMailDemo1 {//使用 javamail  通过 mime 协议发送邮件public static void main(String[] args) throws Exception {// 编写配置Properties props = new Properties();//指定传输协议props.setProperty("mail.transport.protocol", "smtp");//指定主机名props.setProperty("mail.host", "localhost");// 创建与邮件服务器的对话Session session = Session.getInstance(props);// 创建  message 代表一封电子邮件  MimeMessage叫做mime消息MimeMessage message = new MimeMessage(session);// 设置邮件头message.setFrom(new InternetAddress("zhangsan@itcast.cn"));//setRecipient为发送方法,类型一共有三种为枚举类型,有TO(直接发送)、CC(抄送)、BCC(密抄)
message.setRecipient(Message.RecipientType.TO,new InternetAddress("xiaohong@itcast.cn"));//设置主题message.setSubject("这是一封电子邮件");// 封装邮件体,列举了四种形式纯文本的// MimeMultipart multipart = createTextMail();文本加图片的// MimeMultipart multipart = createTextImageMail();文本加附件的// MimeMultipart multipart = createTextAttachMail();文本加图片加附件的MimeMultipart multipart = createTextImageAttachMail();message.setContent(multipart);	// 发送邮件   通过session会话来获取Transport的对象Transport transport = session.getTransport();//输入用户名与密码transport.connect("zhangsan", "123456");transport.send(message);//关闭对象transport.close();}// 纯文本的邮件private static MimeMultipart createTextMail() throws MessagingException {// 创建BodyPartMimeBodyPart bodyPart = new MimeBodyPart();//发送内容,设置编码放乱码bodyPart.setContent("hello", "text/html;charset=utf-8");// 将 BodyPart 存入 Multipart,此处不用描述关系,默认就为正文跟文本的关系mixedMimeMultipart multipart = new MimeMultipart();multipart.addBodyPart(bodyPart);return multipart;}// 文本加图片的邮件private static MimeMultipart createTextImageMail() throws MessagingException {// 创建一个BodyPart封装文本信息MimeBodyPart text = new MimeBodyPart();//将图片直接写到内容中,记住要给图片添加一个ID,src中加入cid:指定是哪个图片text.setContent("aaaaaaaaaaaaaaaaaaa<br><img width='500px' src='cid:myimg' /><br>bbbbbbbbbbbbbbbbbb", "text/html");// 创建一个BodyPart封装图片信息MimeBodyPart image = new MimeBodyPart();// 类加载文件  获得urlURL url = JavaMailDemo1.class.getClassLoader().getResource("a.jpg");//javamail没法吧图片转成mime类型的 image/jpeg,对于图片要用到数据处理器,创建 DataHandler 对象数据处理器DataHandler dh = new DataHandler(url);// 将 DataHandler 设置给 BodyPartimage.setDataHandler(dh);	// 为图片制定内容idimage.setContentID("myimg");// 将上面的两个BodyPart存入一个MultipartMimeMultipart multipart = new MimeMultipart();multipart.addBodyPart(text);multipart.addBodyPart(image);// 描述关系为引用关系multipart.setSubType("related");// 返回 Multipartreturn multipart;}// 文本加附件private static MimeMultipart createTextAttachMail() throws MessagingException {// 创建一个BodyPart封装文本信息MimeBodyPart text = new MimeBodyPart();text.setContent("aaaaaaaaaa", "text/html;charset=utf-8");// 创建一个BodyPart封装附件信息MimeBodyPart attach = new MimeBodyPart();//获取到附件路径
String path = JavaMailDemo1.class.getClassLoader().getResource("a.mp3").getPath();File file = new File(path);//这个是创建DataHandler的另一种方法,需要传入DataSource的接口实现类FileDataSource,需要一个文件对象DataHandler dh = new DataHandler(new FileDataSource(file));attach.setDataHandler(dh);// 作为附件的文件   最终会显示文件名attach.setFileName(file.getName());// 将上面的两个BodyPart存入一个MultipartMimeMultipart multipart = new MimeMultipart();multipart.addBodyPart(text);multipart.addBodyPart(attach);// 描述关系multipart.setSubType("mixed");return multipart;}// 文本加图片加附件(最复杂的)private static MimeMultipart createTextImageAttachMail() throws Exception {// 创建一个BodyPart封装文本信息MimeBodyPart text = new MimeBodyPart();text.setContent("这是一封邮件,有个美女,还有附件哦<br><img width='500px' src='cid:myimg' /><br>bbbbbbbbbbbbbbbbbb", "text/html;charset=utf-8");// 创建一个BodyPart封装图片信息MimeBodyPart image = new MimeBodyPart();// 类加载文件  获得urlURL url = JavaMailDemo1.class.getClassLoader().getResource("一个美女.jpg");// 创建 DataHandler 对象   数据处理器DataHandler dh = new DataHandler(url);// 将 DataHandler 设置给 BodyPartimage.setDataHandler(dh);	// 为图片制定内容idimage.setContentID("myimg");			// 创建一个BodyPart封装附件信息MimeBodyPart attach = new MimeBodyPart();String path = JavaMailDemo1.class.getClassLoader().getResource("一首歌.mp3").getPath();// 由于是url 中文会进行url编码    path中中文会出现 %... 的形式path = URLDecoder.decode(path, "utf-8");File file = new File(path);dh = new DataHandler(new FileDataSource(file));attach.setDataHandler(dh);// 作为附件的文件   最终会显示文件名,文件名为中文的时候就要用到MimeUtility的encodeText方法,否则就乱码 了String filename = MimeUtility.encodeText(file.getName());attach.setFileName(filename);// 将上面的三个BodyPart存入一个Multipart// 先将前两个组合  描述关系MimeMultipart multipart1 = new MimeMultipart();multipart1.addBodyPart(text);multipart1.addBodyPart(image);multipart1.setSubType("related");// 将 组合的 MimeMultipart1 封装为一个bodypart,再与另一个进行组合MimeBodyPart textImage = new MimeBodyPart();//设置图片和文本的内容textImage.setContent(multipart1);// 将组合的 和 attach 加入一个 multipartMimeMultipart multipart2 = new MimeMultipart();multipart2.addBodyPart(textImage);multipart2.addBodyPart(attach);return multipart2;}
}


这篇关于Mime协议发送邮件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040804

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备