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发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright