利用spring mail 发送带附件的邮件

1.核心代码

  我们使用spring的mail,最主要是调用JavaMailSender mailSender和Template template;对象,创建message对象和cc、to、from等

MimeMailService类

private JavaMailSender mailSender;

	private Template template;

	/**
	 * Spring的MailSender.
	 */
	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}

	/**
	 * 注入Freemarker引擎配置,构造Freemarker 邮件内容模板.
	 */
	public void setFreemarkerConfiguration(Configuration freemarkerConfiguration) throws IOException {
		// 根据freemarkerConfiguration的templateLoaderPath载入文件.
		template = freemarkerConfiguration.getTemplate("mailTemplate.ftl", DEFAULT_ENCODING);
	}

	/**
	 * 发送MIME格式的用户修改通知邮件.
	 * @param title 邮件名
	 * @param fileList 附件地址
	 * @return true/发送成功 false/发送失败
	 */
	public Boolean sendNotificationMail(String title, List fileList) {
		try {
			// 创建message对象
			MimeMessage msg = mailSender.createMimeMessage();
			// 生成spring的helper类,赋值收件人、发件人、抄送、主题等
			MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);

			// 收件人
			helper.setTo(C.MAIL_TO);
			// helper.setCc("[email protected]");
			// 发件人
			helper.setFrom(C.MAIL_FROM);
			// 主题
			helper.setSubject(title + "日接客送客生成通知");

			// 使用Freemarker生成html格式内容,即mailTemplate.ftl的内容
			String content = generateContent(title);
			helper.setText(content, true);

			// 附件对象,添加进邮件helper内
			for (String fileUrl : fileList) {
				logger.info("接客送客生成:" + fileUrl);
				File file = new File(fileUrl);
				String fileNm = file.getName();
				helper.addAttachment(fileNm, file);
			}

			mailSender.send(msg);
			logger.info("HTML版邮件已发送至" + C.MAIL_TO);
			return true;
		} catch (MessagingException e) {
			logger.error("构造邮件失败", e);
			return false;
		} catch (Exception e) {
			logger.error("发送邮件失败", e);
			return false;
		}
	}

	/**
	 * 使用Freemarker生成html格式内容.
	 */
	@SuppressWarnings("unchecked")
	private String generateContent(String userName) throws MessagingException {

		try {
			Map context = Collections.singletonMap("userName", userName);
			return FreeMarkerTemplateUtils.processTemplateIntoString(template,
					context);
		} catch (IOException e) {
			logger.error("生成邮件内容失败, FreeMarker模板不存在", e);
			throw new MessagingException("FreeMarker模板不存在", e);
		} catch (TemplateException e) {
			logger.error("生成邮件内容失败, FreeMarker处理失败", e);
			throw new MessagingException("FreeMarker处理失败", e);
		}
	}

2.依赖的文件配置

applicationContext-email.xml


	
		
		
		
		
			
				true
				true   
				
				
			
		
	

	
	

	
	
		
		
	

	
	
		
	

mailTemplate.ftl(邮件模板)


对账单生成通知

	

对账单${userName}已经生成,请查看附件!



3.程序入口

@Autowired
	public MimeMailService mimeMailService;
	
	public void execute(){
		List list = new ArrayList();
		list.add("d:/002.jpg");
		
		mimeMailService.sendNotificationMail("这是测试的title",list);
	}



类似的文章,请戳我

你可能感兴趣的:(Spring)