Java批量发带远程附件的邮件2--发送远程附件

2023-10-30

业务背景及需求:

公司需要统一发送同类型的邮件给一批人时,比如发送员工个人薪资表分别至个人邮箱。

此类邮件标题,内容,发送人等基本一致,且需要带附件,而其附件是收件人的隐私性个人信息

若通过上传文件保存到数据库里然后在发邮件的方式,浪费空间和时间。将远程附件写到磁盘在发送则占据磁盘空间,性能不够优。

直接读取远程文件并发送,省掉上传附件的步骤。也不必占用磁盘空间。

/**
	 * 发送远程文件邮件
	 * 
	 * @param to      收件人
	 * @param subject 邮件主题
	 * @param content 邮件内容
	 * @param smbFile 远程文件
	 */
	public void sendRemoteFile2Mail(Mail mail, MailTemplate mailTmpl, SmbFile smbFile) throws Exception {

		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message, true);

		helper.setFrom(mailTmpl.getMessageSender());
		helper.setTo(mail.getEmailAddress());
		helper.setSubject(mailTmpl.getMessageSubject());
		message.setContent(getMultipart(mailTmpl.getMessageBody(), smbFile));

		if (null != mail.getMailCC() && !"".equals(mail.getMailCC())) {
			helper.setCc(mail.getMailCC());
		}

		if (null != mail.getMailBCC() && !"".equals(mail.getMailBCC())) {
			helper.setBcc(mail.getMailBCC());
		}

		mailSender.send(message);

	}

	/**
	 * 获取Multipart对象,包含正文内容、附件、文件名
	 * 
	 * @return
	 */
	private Multipart getMultipart(String content, SmbFile smbFile) throws Exception {
		Multipart multipart = new MimeMultipart();

		// 向multipart中添加正文
		BodyPart contentBody = new MimeBodyPart();
		contentBody.setContent(content, "text/html;charset=UTF-8");
		multipart.addBodyPart(contentBody);

		// 向multipart中添加远程附件
		MimeBodyPart fileBody = new MimeBodyPart();
		DataSource source = new ByteArrayDataSource(new BufferedInputStream(new SmbFileInputStream(smbFile)),
				"application/html");
		fileBody.setDataHandler(new DataHandler(source));
		fileBody.setFileName(MimeUtility.encodeText(smbFile.getName(), "UTF-8", "B"));
		multipart.addBodyPart(fileBody);

		return multipart;
	}

其中Mail与MailTemplate为自建的Java类,

邮件模板MailTemplate包含邮件的标题,正文,类型,邮件统一发件人等信息;而Mail包含收件人,抄送人,密抄送人等信息。

简化版可以为:(最普通的邮件类型,无抄送人等)

/**
	 * 发送邮件
	 * 
	 * @param mail
	 * @throws UnsupportedEncodingException
	 * @throws MessagingException
	 */
	public static void sendMail(Mail mail) throws UnsupportedEncodingException, MessagingException {
		/*
		 * 动态存入mail params: from:发送人账号 fromName:发送人姓名 subject:邮件主题 to:收件人账号 content:邮件内容
		 */
		// 设置邮件内容
		JavaMailSenderImpl mailSender = createMimeMessage();
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
		messageHelper.setFrom(mail.getFrom());
		messageHelper.setSubject(mail.getSubject());
		messageHelper.setText(mail.getContent());
		messageHelper.setTo(mail.getTo());
		mailSender.send(mimeMessage);
	}

 

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

Java批量发带远程附件的邮件2--发送远程附件 的相关文章

  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • 通过 html tidy 提供渲染 jsp 页面

    我有一个在 Glassfish 上运行的 Java 项目 它会呈现一些难看的 HTML 这是使用各种内部和外部 JSP 库的副作用 我想设置某种渲染后过滤器 通过 HTMLTidy 提供最终的 HTML 这样源代码就很好且整洁 有助于调试
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • Active MQ - HelloWorld 示例异常

    我正在尝试运行 hello world 示例在这里找到 http activemq apache org hello world html I added activemq all 5 5 1 jar已经到图书馆了 它构建成功 但出现以下警
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • 为什么下面代码的输出是Thread[main,5,main]

    public class test1 public static void main String args TODO Auto generated method stub Thread t Thread currentThread Sys
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • Elasticsearch - EdgeNgram + 突出显示 + term_vector = 不好的突出显示

    当我使用带有edgengram min 3 max 7 front term vector with positions offsets的分析器时 文档包含文本 CouchDB 当我搜索 couc 时 我的亮点是 cpu 而不是 couc
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • 如何在速度模板中检索哈希图值

    如何从速度模板中的以下哈希图中检索值 请帮忙 LinkedHashMap
  • while 之后无法访问的语句[重复]

    这个问题在这里已经有答案了 我只是修改代码 在以下代码中出现错误 int x 1 System out println x x while true x System out println x x 错误在最后一行 我可以知道错误 错误 无
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下

随机推荐

  • python每日学5:python工程(大型项目)的组织架构:包、模块、类、方法

    题外话 在大型项目中 往往一个个模块已经不够组织起项目了 就比如一个文件夹下放了上千个文件 那想找到某一个文件就会变得困难 管理学中有种说法 一个管理者最适合管理 的对象是7个 假如程序的基本单元是函数 一个类包含7个函数 一个模块包含7个
  • C#怎么判断一个Socket是否连接

    判断Socket是否连接上 需要通过发包来确认 1 检查一个Socket是否可连接 2 private bool IsSocketConnected Socket client 3 4 bool blockingState client B
  • openGL之API学习(八十一)glsl的双精度double-precision

    10年以前的旧显卡基本上是没有双精度的 新显卡使用双精度需要开启GL ARB vertex attrib 64bit 和 GL ARB gpu shader fp64扩展 并且显卡架构要在SM5以上 就算有些显卡支持双精度类型 但是一些函数
  • java学生信息管理系统MVC架构

    一 项目结构 学生信息管理系统分三层进行实现 student java主要提供数据 cotroller java的功能是绑定试图和计算数据 Stuview java用于单一的用来显示数据 二 源码 1 1 Student 类 FileNam
  • 利用altium怎么生成PDF及怎么1:1打印文档

    画完板子之后 还要生成原理图PDF文档 供其他设计人员参考和指正 上图红框标注的两个地方 分别用于打印预览设置和生成原理图PDF 那么若是生成原理图PDF文档 则选择smart PDF即可 点击smart PDF后 点击next 上图中可以
  • vs如何断点?如何判断循环语句哪次出问题?

    红色的小点 按Fn F9 鼠标打字停在哪一行就会在哪一行 可以切换断点 再按一下则小红点消失 黄色的箭头 按Fn F10 再按Fn F10 就会到下一行 如果按Fn F5箭头会直接跳到红色的小点处 怎么看循环语句哪一次循环出问题呢 在断点
  • 算法:用Java实现双轴快速排序(DualPivotQuickSort)

    本文是用Java实现双轴快速排序 我找不到参考的文章地址了 十分抱歉 在此感谢参考文章的原作者 是你给了我思路和灵感 双轴快速排序和普通的快速排序不同的地方在于 普通的快速排序选出一个数字 作为一个基准值 然后通过数组值交换的方式 让左边区
  • Ant Design Pro项目中 提示:找不到模块“@ant-design/pro-components”或其相应的类型声明

    Ant Design Pro中在使用 StatisticCard 指标卡组件时候 按照官方的文档从 ant design pro components 中引入这个组件发现会报错 提示找不到模块 ant design pro componen
  • [659]linux安装RabbitMQ

    文章目录 安装Erlang 安装rabbitmq 关闭防火墙 否则非本地设备无法访问RabbitMQ服务 查看RabbitMQ运行状态 设置开机启动 添加用户 删除一个用户 修改用户的密码 设置用户角色 查看用户 设置用户权限 添加虚拟机
  • java 打印 发票_基于Excel和Java自动化:发票生成器

    对于销售人员 使用Excel创建发票是很常见的 但是该过程通常涉及许多容易出错的手动操作 例如输入数据 复制 粘贴等 如何实现一个可以将数据从数据库自动填充到发票Excel模板中 而无需再辛苦手动输入 从繁重的手动录入中解脱出来 并且避免认
  • win10计算器rsh_厉害了我的哥!win10计算器自带程序员模式太强大了!

    生活工作中常常会遇到用计算器的地方 比如算工资 算房贷啦 算卡路里等 一个有诸多功能的计算器能帮你省去大部分时间 你们知道吗 在windows计算器里 竟然还有程序员模式 可进行各种逻辑运算 快来和小编一起来看一下吧 相信大家Windows
  • C++几个关键字总结——const、static、extern、volatile

    1 const const 基本原理 被修饰的对象的值不可以被修改 const 推出的初始目的 正是为了取代预编译指令 消除它的缺点 同时继承它的优点 1 const修饰基本数据类型 表示常量 必须进行初始化 有以下两种初始化的方式 编译时
  • 数据分析中的mysql基础

    引言 之前的博客对mysql的一些入门知识进行了讲解 该博客将对sql的四个分类进行讲解 之前博客地址 https blog csdn net weixin 45696161 article details 106310108 sql的分类
  • python热度图改坐标_python matplotlib imshow热图坐标替换/映射实例

    今天遇到了这样一个问题 使用matplotlib绘制热图数组中横纵坐标自然是图片的像素排列顺序 但是这样带来的问题就是画出来的x y轴中坐标点的数据任然是x y在数组中的下标 实际中我们可能期望坐标点是其他的一个范围 如图 坐标点标出来的是
  • 笔记本关机后耗电严重问题怎么解决?一秒快速解决笔记本电脑关机掉电快的问题

    前言 或许许多使用笔记本的朋友都会遇到一个很头疼的问题 那就是笔记本关机放一段时间后 一周以内或者几个小时 电池电量消耗非常大 那么到底是什么原因导致笔记本关机后耗电快呢 如何解决耗电快的问题呢 下面详细讲述问题点及其解决方法 几个问题点
  • mysql数据库字符集_超详细的MySQL数据库字符集总结,值得收藏

    MySQL支持多种字符集 character set 提供用户存储数据 同时允许用不同排序规则 collation 做比较 下面基于MySQL5 7介绍一下字符集相关变量的使用 一 字符集 字符序的概念与联系 在数据的存储上 MySQL提供
  • c语言负数翻转问题

    1 在项目中 我们经常会用到变量 那么在变量的定义和传递过程中 经常会出现负数的翻转问题 int test funtion return 1 void poll fun unsigned int a while a gt 250 print
  • 你是一名努力工作的程序员,还是懒惰的程序员?

    当人们在进行一项体力工作时 你很容易评估他们工作的努力程度 你可以看到他们的身体动作 看他们流了多少汗水 也可以去看他们的工作成果 砖墙越砌越高 地上的洞越来越大 对努力工作的认可和奖励是人类一个非常基本的本能 这也是为什么我们对耐力运动如
  • 自已动手修改同花顺K线周期的快捷键

    同花顺的1分钟 5分钟 15分钟 30分钟 60分钟的K线周期快捷键为M1 M5 M15 M3 M6 不像大智慧为1 2 3 4 操作很是方便 让我们来把它给改一改 1 下载Restorator http www downxia com d
  • Java批量发带远程附件的邮件2--发送远程附件

    业务背景及需求 公司需要统一发送同类型的邮件给一批人时 比如发送员工个人薪资表分别至个人邮箱 此类邮件标题 内容 发送人等基本一致 且需要带附件 而其附件是收件人的隐私性个人信息 若通过上传文件保存到数据库里然后在发邮件的方式 浪费空间和时