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

IO 同时被 2 个专栏收录
7 篇文章 0 订阅
8 篇文章 0 订阅

业务背景及需求:

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

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

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

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

/**
	 * 发送远程文件邮件
	 * 
	 * @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);
	}

 

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值