Thymeleaf在SSM中邮件模板使用

5 篇文章 0 订阅
2 篇文章 0 订阅

配置

	<!-- Thymeleaf view -->	
	<bean id="emailTemplateResolver" class="org.thymeleaf.templateresolver.ClassLoaderTemplateResolver" >
		<property name="prefix" value ="template/email/" />
		<property name="templateMode" value ="HTML5"  />
		<property name="characterEncoding" value ="utf-8" /> 
		<property name = "order" value="1" />
	</bean>
	<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
		<property name="templateResolver" ref="emailTemplateResolver" />
	</bean>

使用

	/**
	 * @param resend 再次发送状态
	 * @param checkHastily 紧急邮件状态
	 * @param checkRead 回执状态
	 */
	public MyResult mailYard(int resend, String classId,
			Yard yard, String[] ids, String[] ccemails,
			String entryMode, String ps, HttpSession session, Integer checkHastily, Integer checkRead) {
		MimeMessage mail = javaMailSender.createMimeMessage();
		MimeMessageHelper helper;
		List<AB> absO = new ArrayList<AB>();

		try {
			helper = new MimeMessageHelper(mail, true, "utf-8");
			helper.setSubject("Container delivery pre-inform!");
			helper.setFrom(javaMailSender.getUsername());

			// helper.setTo(yard.getEmail1());
			mail.addRecipient(RecipientType.TO, new InternetAddress(yard.getEmail1()));
			if (!yard.getEmail2().trim().equals("")) {
				// helper.addCc(yard.getEmail2());
				mail.addRecipient(RecipientType.TO, new InternetAddress(yard.getEmail2()));
			}

			for (String ccemail : ccemails) {
				helper.addCc(ccemail);
				// mail.addRecipient(RecipientType.TO, new InternetAddress(ccemail));
			}

			Context ctx = new Context();
			ctx.setVariable("contactPerson", yard.getContactPerson());
			ctx.setVariable("entryYardMode", entryMode);
			ctx.setVariable("yardNameCn", yard.getNameCn() == null ? yard.getName() : yard.getNameCn());
			ctx.setVariable("yardNameEn", yard.getNameEn() == null ? yard.getName() : yard.getNameEn());
			ctx.setVariable("ps", ps);

			Object obj = session.getAttribute("currentUser");
			User logUser = new User();
			if (obj != null)
				logUser = (User) obj;
			ctx.setVariable("userName", logUser.getName());
			ctx.setVariable("userNameEn", logUser.getNameEn());
			ctx.setVariable("userEmail", logUser.getEmail());
			ctx.setVariable("userTel", logUser.getTel());

			List<AB> absO1 = abMapper.selectABsByReturnYardId(yard.getId(), classId);
			for (AB ab : absO1) {
				if (useArraysBinarySearch(ids, ab.getId())) {
					absO.add(ab);
				}
			}
			if (absO.size() > 0) {
				// 因前面符号相同,按照还箱单号后面数字顺序排序 ZR20191201,ZR201912
				long[] strings2 = new long[absO.size()];
				List<AB> abs = new ArrayList<AB>();
				for (int i = 0; i < absO.size(); i++) {
					String regEx = "[^0-9]";
					Pattern p = Pattern.compile(regEx);
					if (null != absO.get(i).getReturnSn() && !"".equals(absO.get(i).getReturnSn())) {
						Matcher m = p.matcher(absO.get(i).getReturnSn());
						strings2[i - abs.size()] = Long.valueOf(m.replaceAll("").trim());
					} else {
						abs.add(absO.get(i));
					}
				}
				Arrays.sort(strings2);
				for (int i = 0; i < strings2.length; i++) {
					for (int j = 0; j < absO.size(); j++) {
						if (absO.get(j).getReturnSn().contains(String.valueOf(strings2[i]))) {
							abs.add(absO.get(j));
							break;
						}
					}
				}

				ctx.setVariable("abs", abs);
			} else
				return new MyResult(0, "XXXXXX");

			String content = templateEngine.process("XXXXXXEn.html", ctx);

			helper.setText(content, true);

			// 邮件图片
			addInLineImages(helper);

			if (checkHastily == 1) {
				mail.setHeader("X-Priority", "1");
			}
			if (checkRead == 1) {
				mail.setHeader("Disposition-Notification-To", javaMailSender.getUsername());
			}

			// 如果要添加附件
		  /*String fullFilename = "";
			String shortFilename = "";

			for (AB ab : absO1) {
				String filename = ab.getReturnFile();
				fullFilename = fileFolder + "/pdf/xxx/" + filename;
				try { 
					shortFilename = filename.substring(0, filename.indexOf('_'))
							+ "_re" + filename.substring(filename.lastIndexOf('.'));
				} catch (Exception e) {
					logger.error(e.getMessage());
					shortFilename = filename;
				}
				FileSystemResource file = new FileSystemResource(fullFilename);
				helper.addAttachment(shortFilename, file);
			}*/

			javaMailSender.send(mail);

			// 更新信息状态TODO
		
		} catch (MessagingException e) {
			logger.error("发送邮件异常:" + e);
			return new MyResult(0, "邮件发送失败:" + e.getLocalizedMessage());
		} catch (MailAuthenticationException e) {
			logger.error("发送邮件异常发送认证失败:" + e);
			return new MyResult(0, "邮件发送认证失败,请检查邮件服务器设置!");
		} catch (TemplateInputException e) {
			logger.error("发送邮件异常模板丢失:" + e);
			return new MyResult(0, "邮件模板丢失,邮件发送失败!");
		} catch (TemplateProcessingException e) {
			logger.error("发送邮件异常模板错误:" + e);
			return new MyResult(0, "邮件模板错误,邮件发送失败!");
		} catch (Exception e) {
			logger.error("发送邮件异常:" + e);
			return new MyResult(0, "邮件发送失败:" + e.getLocalizedMessage());
		}
		return new MyResult(1, "共 " + absO.size() + " 个邮件已提交邮件发送服务器!");
	}

	private void addInLineImages(MimeMessageHelper helper) throws MessagingException {
		ClassPathResource logoImage = new ClassPathResource("template/email/imgs/logo.png");
		ClassPathResource barImage = new ClassPathResource("template/email/imgs/code_bar.png");
		helper.addInline("codeBar", barImage, "image/x-png");
		helper.addInline("logo", logoImage, "image/x-png");
	}

下面是mailRecieveYardEn.html 模板,mailRecieveYardCn.html是中文版。
这两个模板都在template/email/下

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body style="padding:10px;">
<!-- 	<img src="cid:zihLogo" style="height:68px;"/> -->
	<p>Dear <b th:text="${contactPerson}" >contactPerson</b> ,</p>
	<p>Good day.</p>
	<p>XXXXXXXXXXXX.</p>
	<p>Container details:</p>

	<table >
		<tr style="height:35px;background-color:plum;">
			<th width="40px">#</th>
			<th width="120px">CNTR.No</th>
			<th width="50px">Type</th>
			<th width="200px">Ref.</th>
			<th width="300px">Depot</th>
		</tr>
      	<tr  th:each="ab,iterationStatus:${abs}" style="background-color:wheat;">
      		<td align="center" th:text="${iterationStatus.count}">1</td>
        	<td align="center" th:text="${ab.containerNo}">containerNo</td>
        	<td align="center" th:text="${ab.containerType}">containerType</td>
        	<td align="center" th:text="${ab.returnSn}">containerNo</td>
        	<td align="center" th:text="${yardNameEn}">depot</td>
      	</tr>
    </table>
    <p style="text-indent:2em;" th:text="${ps}">ps</p>
    <p></p>
	<p>Yours sincerely, </p>
	<hr style="margin-bottom:auto auto 0px auto;"/>
	<ol class="footer" style="list-style:none;font-size:12px;color:indigo;padding-left:20px;margin:0 auto 0 auto;">
			<li style="list-style:none;"><img src="cid:logo"/><img src="cid:codeBar" style="height:107px;"/></li>
		<li style="list-style:none;">XXXXXX<span th:text="${userNameEn}">1</span></li>
		<li style="list-style:none;">Web: XXXXXX</li>
		<li style="list-style:none;">Add:XXXXXX</li>
		<li style="list-style:none;" th>E-mail: <span th:text="${userEmail}">1</span></li>
		<li style="list-style:none;">Tel: <span th:text="${userTel}">1</span></li>
	</ol>
</body>
</html>

上面使用中邮箱配置

// XXX.properties配置
	#[email] 邮件
	email.host=smtp.qiye.163.com
	email.port=25
	email.username=XXXXXX
	email.password=XXXXXX
	email.smtpAuth=true
	email.smtpConnectiontimeout=800000000
	email.smtpTimeout=800000000

// spring-mybatis.xml配置
	<util:properties id="sysconfig" location="classpath:XXX.properties" />
	
	<!--邮件发送 -->
    <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="#{sysconfig['email.host']}"/>
        <property name="port" value="#{sysconfig['email.port']}"/>
        <property name="username" value="#{sysconfig['email.username']}"/>
        <property name="password" value="#{sysconfig['email.password']}"/>
        <property name="javaMailProperties">
            <props >
                <prop key="mail.smtp.auth">#{sysconfig['email.smtpAuth']}</prop>
                <prop key="mail.smtp.connectiontimeout">#{sysconfig['email.smtpConnectiontimeout']}</prop>
                <prop key="mail.smtp.timeout">#{sysconfig['email.smtpTimeout']}</prop>
<!--                 <prop key="sendFrom">#{sysconfig['email.username']}</prop>  -->
            </props>
        </property>
    </bean>

效果

发送收箱通知邮件,邮件截图:发送收箱通知邮件,邮件截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值