java mail 添加附件以及邮件中穿插图片方法

2023-11-12

部分代码:

     /**
 * 创建邮件中的附件
 * @param filepath 附件的路径
 * @return         生成附件的对象
 * @throws Exception
 *
 * 测试: filepath = e:\测试\tomcat.png
 * e盘下的tomcat图片
 *
 */
public static MimeBodyPart createAttachmentImg(String filepath) throws Exception{
    /*创建一个表示附件的MimeBodyPart对象,并加入附件内容以及相应的信息*/
    MimeBodyPart attachPart=new MimeBodyPart();
    //FileDataSource用于读取文件数据,并返回代表数据的输入输出和数据的MIME类型
    FileDataSource fileDataSource=new FileDataSource(filepath);

    //DataHandler类用于封装FileDataSource对象,并为应用程序提供访问数据的接口
    attachPart.setDataHandler(new DataHandler(fileDataSource));

    //设置附件名称,MimeUtility.encodeText可以处理乱码问题
    // 加上这句话意味着是作为附件存在的,图片或是文件
    //   fileDataSource.getName() -->   tomcat.png
    attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));
    // 如需要在相关的html代码中显示
    // 此方法添加则意味着是于html中的具备某种关系,表示附件图片的相对路径,图片直接出现在文本里
    attachPart.setHeader("Content-ID", fileDataSource.getName());

    return attachPart;
}

html 代码所做处理:

注意src 写法 表示为图片的相对路径

 <img src="cid:tomcat.png" alt="[tomcat logo]" />

完整




import cn.hutool.core.io.FileUtil;
import org.junit.Test;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;

public class TestSendMail {
    @Test
    public void test() throws Exception {
        String send = "发送给谁" ;
        String userName = "发送者的用户名" ;
        String pwd = "密码" ;

        String subject = "java_mail 邮件发送测试" ;
        String img = "E:\\src\\测试数据\\jsp\\tomcat.png" ;
        String path = "E:\\src\\测试数据\\jsp\\index.jsp" ;

        Message message = null ;

        // 定义邮箱服务器配置
        Properties props=new Properties();
        // 163 邮件服务器地址
        props.put("mail.smtp.host", "smtp.163.com");
        // 163 邮件服务器端口
        props.put("mail.smtp.port", "25");
        // 163 邮件服务器认证属性
        props.put("mail.smtp.auth", true);

        //获取session 并传入用户名,密码
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName, pwd);
            }
        });

        message=new MimeMessage(session);
        // 设置发送人地址
        message.setFrom(new InternetAddress(userName));
        //目标用户邮箱地址
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(send));
        // 设置发送日期
        message.setSentDate(new Date());
        //设置主题
        message.setSubject(subject);

        Multipart multipart=new MimeMultipart();

        //获取html 页面代码
        BodyPart bodyPart=new MimeBodyPart();
        StringBuffer sb=readLine1(path);
        bodyPart.setContent(sb.toString(), "text/html;charset=utf-8");

        multipart.addBodyPart(bodyPart);
        //图片附近
        multipart.addBodyPart(createAttachmentImg(img));
        //页面附件
        multipart.addBodyPart(createAttachment(path));
        message.setContent(multipart);
        // 发送
        Transport.send(message);

        System.out.println("完成-------------");

    }

    /**
     * 创建邮件中的附件
     * @param filepath 附件的路径
     * @return         生成附件的对象
     * @throws Exception
     */
    public static MimeBodyPart createAttachment(String filepath) throws Exception{
        //创建一个表示附件的MimeBodyPart对象,并加入附件内容以及相应的信息
        MimeBodyPart attachPart=new MimeBodyPart();

        //FileDataSource用于读取文件数据,并返回代表数据的输入输出和数据的MIME类型
        FileDataSource fileDataSource=new FileDataSource(filepath);

        //DataHandler类用于封装FileDataSource对象,并为应用程序提供访问数据的接口
        attachPart.setDataHandler(new DataHandler(fileDataSource));

        //设置附件名称,MimeUtility.encodeText可以处理乱码问题
        // 加上这句话意味着是作为附件存在的,图片或是文件
        attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));

        return attachPart;
    }
    /**
     * 创建邮件中的附件
     * @param filepath 附件的路径
     * @return         生成附件的对象
     * @throws Exception
     *
     * 测试: filepath = e:\测试\tomcat.png
     * e盘下的tomcat图片
     *
     */
    public static MimeBodyPart createAttachmentImg(String filepath) throws Exception{
        MimeBodyPart attachPart = createAttachment(filepath);
        // 如需要在相关的html代码中显示
        // 此方法添加则意味着是于html中的具备某种关系,表示附件图片的相对路径,图片直接出现在文本里
        attachPart.setHeader("Content-ID", new File(filepath).getName());
        return attachPart;
    }

    public StringBuffer readLine1(String path)throws  Exception{
        StringBuffer sb=new StringBuffer();
        List<String> list = FileUtil.readLines(path, "utf-8");
        for(String str : list){
            sb.append(str);
        }
        return  sb ;
    }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java mail 添加附件以及邮件中穿插图片方法 的相关文章

  • Eclipse 中的 Java 构建路径问题

    在 Eclipse 中 我有一个与我的构建路径相关的错误 错误 Project XX is missing required library middlegen 2 1 jar 但该库在构建路径配置之前被删除 是不是缓存或者其他方面有问题
  • 无法禁用 Firestore 中的离线数据

    从我的数据中删除数据后Firestore Database 这需要我的Android app一段时间后才意识到数据已被删除 我认为这是由于自动数据缓存而发生的 我的应用程序与离线使用无关 我想禁用此功能 我已将其添加到我的自定义中Appli
  • 如何注入“运行时”依赖项,例如登录用户,该依赖项在应用程序启动时不可用?

    我只是不明白这个 我在我的 java GWT 应用程序中使用 Gin 来进行 DI 登录屏幕集成到完整的应用程序窗口中 用户登录后 我想将用户对象注入到我创建的其他类 例如 GUI Presenters 中 因此我相信存在某种运行时依赖性
  • 在 libgdx 中批处理多维数据集时出现问题

    我正在尝试开发一款游戏 在屏幕上渲染多达 300 个立方体 为每个多维数据集创建新的 modelInstance 时 modelBatch 的性能非常糟糕 据我所知 没有 3d 批处理可以将所有立方体批处理到一次绘制调用 所以我拼命地尝试以
  • SharePoint 2010 Web 服务上的 Java JBoss 401 错误

    我的代码在 Eclipse IDE 中测试时运行成功 我正在使用生成的 Copy wsdl 通过 Web 服务连接到 MS SharePoint 2010 当我在 JBoss 服务器上部署代码 运行 Adob e LifeCycle 时 我
  • 浏览时 Java Applet 不会被终止

    当用户离开加载小程序的页面时 如何停止 Java 小程序的进程 我正在使用 Chrome 现在要杀死小程序 我必须使用窗口的任务栏并杀死进程 java exe Java applet 具有生命周期方法 那些是init start stop
  • android新手需要了解“?android:attr/actionBarSize”

    我正在经历拉尔斯 沃格尔的教程 http www vogella com articles AndroidFragments article html在使用 Fragments 时 我遇到了以下代码 android layout margi
  • Spring MVC 和 Struts MVC 之间的区别 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Spring MVC 和 Struts MVC 之间的主要区别是什么 Spring MVC 和 Struts 之间的主要区别是 Spr
  • java中的散列是如何工作的?

    我正在尝试弄清楚java中的哈希值 例如 如果我想在哈希图中存储一些数据 它是否会有某种带有哈希值的底层哈希表 或者 如果有人能够对哈希的工作原理给出一个很好且简单的解释 我将非常感激 HashMap 基本上在内部实现为数组Entry 如果
  • 如何增加使用 SAX 解析 XML 文件的entityExpansionLimit

    我正在尝试使用 Java 中的 SAX 解析器解析一个 1 23 GB 的 XML 文件 我使用的是 Mac 操作系统和 JDK 1 7 0 51 不幸的是 我收到以下错误 The pasrser has encountered more
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • 如何使用 Java 文档 API 为 OrientDB 数据库创建自动递增索引/序列?

    我通过其文档 API 将 OrientDB 与 Java 结合使用 我有一个简单的类叫做items它有一个属性ID 我明确声明架构如下 OSchema schema db getMetadata getSchema OClass items
  • 当我打印出数组列表的索引时如何删除最后一个逗号[重复]

    这个问题在这里已经有答案了 List
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • BODMAS系统的加法和减法

    我一直在构建一个简单的公式计算器 但一直被加法和减法困扰 正如您应该知道的 在计算方程时 您遵循优先级算术规则 即括号 顺序 幂函数 除法 乘法 加法和减法 问题是加法和减法具有相同的优先级 因此您可以从左到右阅读 到目前为止 这是我的代码
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • 将 JPanel 添加到 JFrame

    我有一个程序 其中将 JPanel 添加到 JFrame public class Test Test2 test new Test2 JFrame frame new JFrame Test frame setLayout new Bor
  • 在 x64 系统上使用 skype-java-api

    我正在使用 skype java api 在 Java 中使用 Skype 我需要的唯一功能是点击即可拨打电话号码 它在 Windows XP x86 上运行良好 但我刚刚在 Windows 7 x64 上测试它 但失败了 错误是 线程 T
  • Cassandra 会话与集群 有什么可分享的?

    考虑 Cassandra 的 Session 和 Cluster 类 Java 驱动程序 我想知道有什么区别 在 Hibernate 中 每次都会创建一个会话并共享会话工厂 从许多来源我了解到 它被认为是创建一个会话并在多个线程之间共享它
  • Java编程编译jar

    我有一个文本文件中的java源代码 必须在源代码中输入一些自定义的硬编码变量 然后将其转换为 jar 这是可行的 但是当我运行 jar 时 找不到 Main 类 当我用 WinRAR 解压 jar 文件时 我似乎找不到错误 当我通过 cmd

随机推荐

  • 微信小程序 时间处理 bug

    问题 在我的项目中需要处理一个这样的时间 new Date 2020 01 02 10 30 00 在 开发者工具 和 debug 模式下没有问题 但是 在预览模式有问题 经过 尝试 确认了 时间 问题 解决方案 微信 接收类似于 这样的时
  • 智能家居Homekit系列一智能通断开关

    智能通断器 也叫开关模块 可以非常方便地接入家中原有开关 插座 灯具 电器的线路中 通过手机App或者语音即可控制电路通断 轻松实现原有家居设备的智能化改造 随着智能家居概念的普及 越来越多的人想将自己的家改造成智能家庭 但智能电器价格普遍
  • 2023年9月4日-9月10日(上午熟悉公司代码,周一到周五晚上优先工作所急视频教程,其他业余时间进行ue视频教程,为独立游戏做准备,本周15小时,合计2299小时,剩余7701小时)

    按照规划 上午熟悉公司源码 下午进行filament和ue渲染 晚上写工作代码 回家后泛读pbrt或者其他书籍催眠 业余学习ue的各种视频教程 为独立游戏做准备 公司也实行末位淘汰 给自己留条后路 累了就学其他视频教程 随意 可以按照ue
  • 55寸OLED拼接屏的优势是什么?应用在哪些领域?

    OLED拼接屏55寸是一种高端的显示设备 它采用了OLED技术 具有高亮度 高对比度 高色彩饱和度等优点 能够呈现出更加真实 清晰 细腻的图像效果 同时 它还支持多屏拼接 可以将多个屏幕拼接在一起 形成一个更大的显示屏幕 适用于大型展示 广
  • 2012系统里的网页服务器,2012r2云服务器创建网页

    2012r2云服务器创建网页 内容精选 换一换 设置 网络 在下拉列表中选择可用的虚拟私有云 子网 并设置私有IP地址的分配方式 弹性云服务器网络使用虚拟私有云 VPC 提供的网络 包括子网 安全组等 您可以选择使用已有的虚拟私有云网络 或
  • 个人信息管理系统_2020年继续教育个人学时登记以及单位学时登记、审核操作指南来咯...

    近日 自治区人力资源社会保障厅印发 关于做好2020年度全区专业技术人员继续教育工作的通知 桂人社函 2020 157号 规定专业技术人员应于2020年11月30日前完成公需科目必修课学习考试和专业科目学习登记 专业技术人员所在单位应于20
  • 统计数字出现的次数

    在论坛上看到这么一个题 JAVA题 要求任意输入20个10以内的整数 并判断输出每个数字的出现次数并输出 这个题也可以转化为 长度为n n lt 1000 的整数 输出每个数字出现的次数 上面两个题意思相同 每个数字范围只有 0 9 所以我
  • CVPR2022 多目标跟踪(MOT)汇总-补充篇

    为该文章的后续补充https blog csdn net qq 34919792 article details 124343166 七 Multi Object Tracking Meets Moving UAV 作者 Shuai Liu
  • openwrt开启dnsmasq-full替换默认dnsmasq

    因为要用到dnsmasq的ipset功能 所以需要安装dnsmasq full 方法如下 1 进入openwrt目录 配置 make meconfig 在base system里面 2 取消原来的dnsmasq 选中dnsmasq full
  • 【STM32】详解RTC实时时钟的概念和配置&示例代码

    一 什么是RTC RTC Real time Clock 实时时钟 本质上是一个支持BCD编码的定时器 计数器 主电源断电后能够由电池供电 使其时钟跳转依然正常 二 STM32F4芯片内的RTC功能 日历时钟 时分秒 年月日 星期 两个闹钟
  • NBS-Predict:基于脑网络的机器学习预测

    文章来源于微信公众号 茗创科技 欢迎有兴趣的朋友搜索关注 导读 大脑的图模型作为研究跨尺度和跨物种的大脑功能和结构连接的框架具有巨大的潜力 基于网络的统计 NBS 是对大脑图进行统计推断的著名工具 它将基于团簇水平的置换检验和连通分量的图论
  • ST-LINK/V2驱动下载与安装

    1 下载 ST LINKV2仿真器 正点原子资料下载中心 1 0 0 文档 openedv com 点击上面链接到正点原子就可以下载 如下图所示 2 安装 1 将ST LINK连接到电脑 在设备管理器中可以看到是没有通用串行设备 说明电脑没
  • Arthas使用方法

    1 简介 Arthas 是Alibaba开源的Java诊断工具 安装在系统所在服务器 可以帮助开发人员或者运维人员查找问题 分析性能 bug追踪 下载路径 https arthas aliyun com arthas boot jar 2
  • 功能视图的组成

    功能视图是构建联邦学习系统所需功能的技术中立的视图 功能视图描述了支持联邦学习活动所必需功能的分布 定义了功能之间的依赖关系 功能视图涵盖的联邦学习内容如图 包括 功能组件 功能层 跨层功能 功能组件是参与某一活动所需的 能实现的功能构件
  • 与OpenAI的30 天

    30 天 我计划在 GitHub 上测试开源 Ai 项目 并学习如何自己构建一个项目 这些帖子会很短 重点是了解您可以使用 Ai 创造什么以及需要准备什么 图像是使用midjourney生成的 我一直在收集由像你我这样的开发人员创建的 30
  • react-从0到1新建react项目

    目录 1 脚手架创建项目 2 分析目录 3 动态写入值 编辑 4 引入组件 编辑 5 组件传值 6 控制组件传值的类型 类型校验 7 组件插槽 8 函数组件和类组件 9 添加事件 10 引入state 在页面上响应式改变值 编辑 11 子组
  • 【C语言】C语言的495个问题

    文章目录 1 声明和初始化 基本类型 1 1 各类型区别 1 2 为什么不精确定义标准类型的大小 1 3 因为C没有精确定义标准类型大小 那么用typedef定义int16和int32是否能解决问题呢 1 4 新64位机上64位类型是什么样
  • android下m、mm、mmm编译命令的使用

    通过查看android源码目录下的build envsetup sh文件 可知 m Makes from the top of the tree mm Builds all of the modules in the current dir
  • C#编程基础(万字详解,这一篇就够了)

    C 及其开发环境简介 C 概述 C 的编程功能 C 与 Net的关系 Net C C 的集成开发环境 Windows上编写C 程序 Linux Mac OS上编写C 程序 运行第一个HelloWorld程序 C 基本语法 程序实例 C 基本
  • java mail 添加附件以及邮件中穿插图片方法

    部分代码 创建邮件中的附件 param filepath 附件的路径 return 生成附件的对象 throws Exception 测试 filepath e 测试 tomcat png e盘下的tomcat图片 public stati