`
kanpiaoxue
  • 浏览: 1777200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring 使用Freemarker发送邮件的一个简单模板(代码不完整)

 
阅读更多

下面是一个使用过的Freemarker的模板,可以作为参考(代码不完整)。附件就是它的源文件。

dmap-alarm-template-mail.ftl

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>报警邮件</title>
<style>
*{
	font-size: 12px;
}
.mailTitle{
	text-align: center;
	margin-top: 25px;
}
.mailBody{
	margin: 25 25 25 25;
}
.mailTitleTaskName{
	font-size: 16px;
	color: red;
	font-weight: bolder;
}
.mailTitleErrorMessage{
	font-size: 16px;
	color: red;
	font-weight: bolder;	
}
table{margin-left:25px; margin-top:10px; width:95%; border:1px blue solid;}
td{ border:1px solid #cccccc;padding:5px 5px 5px 5px;}
caption{
	background-color: rgb(95,175,17);
	font-weight: bold;
	padding-top: 5px;
	padding-bottom:5px;
}

.copyRight{text-align: center;font-size: 14px; font-weight:bold;color: silver;margin-top:10px;margin-bottom:25px;}
.firstRow{text-align: center;font-size: 14px;font-weight:bold;}
.run_other_state{color: blue;font-weight:bold;}
.run_wait_running{color: silver;font-weight:bold;}
.run_success{color: green;font-weight:bold;}
.run_failure{color: red;font-weight:bold;}
.current_first_column{width:30%;font-weight:bold;}
</style>
</head>
	<body>
		<div class="mailTitle">
			<div class="mailTitleTaskName">任务ID:${current_task_id}</div>
			<div>数据版本:${current_dataversion_no}</div>
			<div class="mailTitleErrorMessage">${current_task_error_message}</div>
		</div>
		<div class="mailBody">
			<table>
				<caption>任务信息</caption>
				<tr>
					<td class="current_first_column">任务ID</td>
					<td>${current_task_id}</td>
				</tr>
				<tr>
					<td class="current_first_column">任务名称</td>
					<td>${current_task_name}</td>
				</tr>
				<tr>
					<td class="current_first_column">数据版本最后更新时间</td>
					<td>${current_dataversion_last_mofied}</td>
				</tr>
				<tr>
					<td class="current_first_column">所属团队</td>
					<td>${current_task_team_name}</td>
				</tr>
				<tr>
					<td class="current_first_column">任务启动延迟时间点</td>
					<td>${current_launched_timeout}</td>
				</tr>
				<tr>
					<td class="current_first_column">运行超时时间</td>
					<td>${current_running_timeout}分钟</td>
				</tr>
				<tr>
					<td class="current_first_column">版本运行信息</td>
					<td>
					<textarea rows="5" style="width:100%;text-align:left;">${current_data_version_message!""}</textarea>					
					</td>
				</tr>
				<tr>
					<td class="current_first_column">第一值班人</td>
					<#if current_task_duty_first??>
						<td>${current_task_duty_first.name}(${current_task_duty_first.username},手机号码:${(current_task_duty_first.mobileNumber)!"无"},邮箱:<a href="mailto:${current_task_duty_first.email}">${current_task_duty_first.email}</a>)</td>
					<#else>
						<td>无</td>
					</#if>
				</tr>
				<tr>
					<td class="current_first_column">第二值班人</td>
					<#if current_task_duty_second??>
						<td>${current_task_duty_second.name}(${current_task_duty_second.username},手机号码:${(current_task_duty_first.mobileNumber)!"无"},邮箱:<a href="mailto:${current_task_duty_second.email}">${current_task_duty_second.email}</a>)</td>
					<#else>
						<td>无</td>
					</#if>
				</tr>
				<tr>
					<td class="current_first_column">直接下游任务数量(DOWN)</td>
					<td>${current_task_down_stream_count}</td>
				</tr>
			</table>

			<#if down_stream_effect_map?exists>
			<#assign rowIndex = 0>
				<#assign mapsize = down_stream_effect_map?size>
				<#if (mapsize>0)>	
				<table style="text-align: center;">
					<caption>当前任务的直接下游任务列表</caption>
					<tr class="firstRow">
						<td>#</td>
						<td>任务类型</td>
						<td>任务ID</td>
						<td>任务名称</td>
						<td>数据版本</td>
						<td>所属团队</td>
						<td>第一值班人</td>
						<td>第二值班人</td>
					</tr>
						<#list down_stream_effect_map?keys as key>
							<#assign ls = down_stream_effect_map[key]>
							<#assign rowspan = ls?size>
							<#list ls as object>
								<#assign rowIndex = rowIndex + 1>
								<tr>
								<td>${rowIndex}</td>
								<#if object_index == 0>
									<td rowspan="${rowspan}">下游任务</td>
									<td rowspan="${rowspan}">${object.taskIdString}</td>
									<td rowspan="${rowspan}">${object.taskName}</td>
								</#if>
								<td>${object.dataVersionNo}</td>
								<#if object_index == 0>
									<td rowspan="${rowspan}">${object.teamName}</td>
									<#if object.firstUser??>
										<td rowspan="${rowspan}">${object.firstUser.name}(${object.firstUser.username},手机号码:${(object.firstUser.mobileNumber)!"无"},邮箱:<a href="mailto:${object.firstUser.email}">${object.firstUser.email}</a>)</td>
									<#else>
										<td rowspan="${rowspan}">无</td>
									</#if>
									<#if object.secondUser??>
										<td rowspan="${rowspan}">${object.secondUser.name}(${object.secondUser.username},手机号码:${(object.secondUser.mobileNumber)!"无"},邮箱:<a href="mailto:${object.secondUser.email}">${object.secondUser.email}</a>)</td>
									<#else>
										<td rowspan="${rowspan}">无</td>
									</#if>
								</#if>
							</tr>																					
							</#list>
						</#list>					
				</table>
			</#if>
			</#if>
			<div class="copyRight">@Copyright: 运营产品研发部-CDC[2014.11-${current_year_month}]</div>
		</div>
	</body>
</html>

 

import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import freemarker.template.Template;

import java.util.Map;

public class TemplateEmailService {
    private FreeMarkerConfigurer freeMarkerConfigurer;
    private String fileName;
    public FreeMarkerConfigurer getFreeMarkerConfigurer() {
        return freeMarkerConfigurer;
    }

    // 通过模板构造邮件内容,参数username将替换模板文件中的${username}标签。
    public <K, V> String getMailText(Map<K, V> map) {
        String htmlText = "";
        try {
            // 通过指定模板名获取FreeMarker模板实例
            Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(
                    fileName);
            // FreeMarker通过Map传递动态数据
            // 解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。
            htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl,
                    map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return htmlText;
    }

    public void setFreeMarkerConfigurer(
            FreeMarkerConfigurer freeMarkerConfigurer) {
        this.freeMarkerConfigurer = freeMarkerConfigurer;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    
}

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:jms="http://www.springframework.org/schema/jms" xmlns:lang="http://www.springframework.org/schema/lang"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:oxm="http://www.springframework.org/schema/oxm"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:sec="http://www.springframework.org/schema/security"
	xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx"

	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
		http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
		http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-4.0.xsd
		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

	<bean id="freeMarker"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="classpath:org/kanpiaoxue/test/freemarker" /><!--指定模板文件目录 -->
		<property name="freemarkerSettings"><!-- 设置FreeMarker环境属性 -->
			<props>
				<prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒 -->
				<prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->
				<prop key="locale">zh_CN</prop><!-- 本地化设置 -->
			</props>
		</property>
	</bean>
	<bean id="templateEmail" class="org.kanpiaoxue.test.freemarker.TemplateEmailService">
		<property name="freeMarkerConfigurer" ref="freeMarker"></property>
	</bean>
</beans>

 main 函数的部分代码:

    private static final String CURRENT_TASK_ID = "current_task_id";
    private static final String CURRENT_TASK_NAME = "current_task_name";
    private static final String CURRENT_TASK_TEAM_NAME = "current_task_team_name";
    private static final String CURRENT_TASK_ERROR_MESSAGE = "current_task_error_message";
    private static final String CURRENT_TASK_DUTY_FIRST = "current_task_duty_first";
    private static final String CURRENT_TASK_DUTY_SECOND = "current_task_duty_second";
    private static final String CURRENT_TASK_DOWN_STREAM_COUNT = "current_task_down_stream_count";
    private static final String CURRENT_DATAVERSION_NO = "current_dataversion_no";
    private static final String CURRENT_DATAVERSION_LAST_MOFIED = "current_dataversion_last_mofied";
    private static final String CURRENT_LAUNCHED_TIMEOUT = "current_launched_timeout";
    private static final String CURRENT_RUNNING_TIMEOUT = "current_running_timeout";
    private static final String DOWN_STREAM_EFFECT_MAP = "down_stream_effect_map";
    private static final String CURRENT_YEAR_MONTH = "current_year_month";
    private static final String CURRENT_DATA_VERSION_MESSAGE = "current_data_version_message";     

 String message = "当前任务运行失败,是由于执行脚本错误:echo 'hello' ,exist code: 1";
        Map<String, Object> map = Maps.newHashMap();
        map.put(CURRENT_TASK_ID, taskId);
        map.put(CURRENT_TASK_NAME, taskName);
        map.put(CURRENT_TASK_TEAM_NAME, teamName);
        map.put(CURRENT_TASK_ERROR_MESSAGE, title);
        map.put(CURRENT_DATAVERSION_NO, dataVersion);
        map.put(CURRENT_DATAVERSION_LAST_MOFIED, lastModifiedTime);
        map.put(CURRENT_TASK_DUTY_FIRST, firstDutyDetail);
        map.put(CURRENT_TASK_DUTY_SECOND, secondDutyDetail);
        map.put(CURRENT_TASK_DOWN_STREAM_COUNT, downstreamCount);
        map.put(CURRENT_LAUNCHED_TIMEOUT, launchedTimeoutString);
        map.put(CURRENT_RUNNING_TIMEOUT, runingTimeout);
        map.put(DOWN_STREAM_EFFECT_MAP, downStreamEffecMap);
        map.put(CURRENT_DATA_VERSION_MESSAGE, message);
        map.put(CURRENT_YEAR_MONTH, DateTime.now().toString("yyyy.MM"));
        String html = template.getMailText(map);

        System.out.println(html);

 

分享到:
评论

相关推荐

    spring整合freemarker发送邮件例子

    在本示例中,我们将探讨如何使用Spring框架与FreeMarker模板引擎相结合,来实现一个功能丰富的电子邮件服务。这个服务能够发送HTML格式的邮件,其中包含内嵌的图片,并且能够处理附件,同时解决字符编码可能导致的...

    Spring+Freemarker 使用163发HTML格式的邮件

    标题 "Spring+Freemarker 使用163发HTML格式的邮件" ...在Spring+Freemarker发送邮件的场景下,这些库可能包含Spring的相关jar包,Freemarker的库,以及JavaMail API等。确保正确引入这些库是项目能够成功运行的关键。

    SpringBoot使用FreeMarker模板发送邮件

    下面是一个使用SpringBoot和FreeMarker模板引擎发送邮件的示例: 首先,我们需要在pom.xml文件中添加以下依赖项: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-freemarker ...

    Spring中使用FreeMaker或Vilocity模板发送邮件

    在这个例子中,`email.ftl`(FreeMarker)和`email.vm`(Velocity)是模板文件,`model`是一个键值对,用于填充模板中的变量。`sendEmailWithFreeMarker`和`sendEmailWithVelocity`方法展示了如何使用这两种模板引擎...

    Spring进阶—如何用Java代码实现邮件发送

    使用Spring发送邮件的基本步骤如下: 1. 添加Spring核心库和相关的邮件发送库(如JavaMail API)到项目依赖中。 2. 在Spring配置文件(如`email-163.xml`)中配置邮件服务器的相关信息,如用户名、密码、SMTP服务器...

    Spring 高效批量邮件发送

    这个源码应该包含了一个实现了MailSender接口的类,可能使用了线程池进行异步发送,以及如何构建邮件模板和处理邮件列表的逻辑。通过阅读和分析源码,你可以学习到如何在Spring中实现批量邮件发送,并从中获取灵感...

    spring + mail + 发送邮件完整 demo (含注释)

    本教程将围绕"Spring + Mail"的组合,结合Freemarker模板引擎,提供一个完整的发送邮件的Demo。 首先,我们需要在项目中添加相关的依赖。Spring框架通常与Spring Boot一起使用,这样可以简化配置。在`pom.xml`或`...

    struts2+spring3.0+mybatis3.0.4集成的邮件发送实例(可上传附件)

    在本例中,可能需要一个`Mail`实体类,用来表示邮件信息,以及一个对应的Mapper接口和XML配置文件,用于执行SQL操作,如插入邮件记录或者获取邮件模板等。 邮件发送功能通常涉及到SMTP服务器,我们需要配置SMTP...

    Spring mail 使用多个账号发送带有附件的HTML邮件

    在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建企业级应用程序提供了全面的编程和配置模型。其中,Spring Mail模块是Spring框架的一部分,它简化了通过JavaMail API发送电子邮件的过程。本文将深入...

    spring+sendmail+模板+properties+vm

    - 发送邮件:在业务逻辑中,使用`JavaMailSender`发送邮件,并将数据注入VM模板,生成邮件正文。 通过以上步骤,开发者可以利用Spring的邮件发送功能,结合VM模板,实现高效且定制化的邮件服务。这种技术在许多...

    java发送电子邮件代码

    - **邮件模板**:在实际应用中,经常需要发送结构相似但具体内容不同的邮件,此时可以使用模板引擎(如Freemarker)来动态生成邮件内容。代码中引用的`FreeMarkerConfigurer`和`Template`就是为此目的服务的,可以...

    freemarker及安装

    2. 邮件发送:可以使用Freemarker模板动态生成邮件内容,提高邮件的个性化程度。 3. 文档生成:Freemarker也可用于生成各种格式的文档,如PDF、Excel等,只需为模板提供相应的数据模型。 4. API文档:一些API文档...

Global site tag (gtag.js) - Google Analytics