1.使用系统指定的邮件模板
使用Velocity的VTL编写模板如下:
Hello,${userName}
邮件模板内容可以vm模板文件形式保存,也可以存入数据库中。暂且将其存入hello.vm文件,并将该文件放在Classpath的根路径下
ITemplateMailAgent抽象接口定义
public interface ITemplateMailAgent{
//convenient sending method with only recipient.TO
void sendMail(String receiver,String subject,String templateKey,Map<String,Object>context);
//central method to send E-mail with template support
//@param receivers Recipients as a Parameter wrapper object
//@param templateKey the identity of the template to use
//@param context contains data that will be merged into template
void sendMai(Recipients receivers,String subject,String templateKey,Map<String,Object>context);
}
ITemplateMailAgent的抽象允许我们提供基于不同模板技术的实现类,我们使用Velocity
针对Velocity的ITemplateMailAgent实现类定义代码
public class VelocityTemplateMailAgent implements ITemplateMailAgent{
private final String DEFAULT_SENDER = sender@xxx.com.cn;
private final String DEFAULT_ENCODING = "UTF-8";
private String mailFrom = DEFAULT_SENDER;
private String mailEncoding = DEFAULT_ENCODING;
private JavaMailSender javaMailSender;
private VelocityEngine velocityEngine;
public void sendMail(String receiver,String subject,String templateKey,
Map<String,Object>context){
Recipients recipients = new Recipients(receiver);
sendMail(recipients,subject,templateKey,context);
}
public void sendMail(final Recipients receivers,final String subject,String templateKey,
Map<String,Object>context){
validateRecipients(receivers);
Validate.notEmpty(templateKey);
StringWriter writer = new StringWriter();
VelocityEngineUtils.mergeTemplate(velocityEngine,templateKey,getMailEncoding(),context,writer);
final String mailText = writer.toString(); //mail content is ready
getJavaMailSender().send(new MmeMessagePreparator(){
public void prepare(MimeMessage message)throws Exception{
MimeMessageHelper helper = new MimeMessageHelper(message,getMailEncoding());
helper.setFrom(getMailFrom());
helper.setTo(receivers.getTo());
if(!CollectionUtils.isEmpty(receivers.getCcList())){
helper.setCc(receivers.getCc());
}
if(!CollectionUtils.isEnpty(receivers.getBccList())){
helper.setBcc(receivers.getBcc());
helper.setSubject(subject);
helper.setText(mailText);
}
}
});
}
private void validateRecipients(Recipients receivers){
//...
}
//用于依赖注入的getter和setter方法定义
}
VelocityTemplateMailAgent的实现逻辑依赖于两个主要组件:模板引擎VelocityEngine,JavaMailSender
VelocityTemplateMailAgent及其相关实现类使用配置示例
<bean id="cpLoaderVelocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="configLocation" value="classpath:cn/spring21/conf/velocity-config.properties" />
</bean>
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="..." />
<property name="username" value="..." />
<property name="password" value="..." />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
</bean>
<bean id="templateEmailAgent" class="com.xxx.mail.template.VelocityTemplateMailAgent">
<property name="javaMailSender" ref="javaMailSender" />
<property name="velocityEngine" ref="cpLoaderVelocityEngine" />
</bean>
#velocity-config.properties
resource.loader=classpath
classpath.resource.loader.description=Classpath Resource Loader
classpath.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
velocimacro.library=
通过如下方式发送最初模板所设定的邮件内容
VelocityTemplateMailAgent mailAgent = ... //通过IoC容器注入或查找相应实例
Map<String,Object>context = new HashMap<String,Object>();
context.put("userName","Allen");
mailAgent.sendMail(test@gmail.com,"邮件标题","hello.vm",context);
分享到:
相关推荐
当我们需要在应用中集成邮件服务,Spring Boot提供了很好的支持。本压缩包"springboot-mail.zip"包含了实现邮件发送的相关代码示例,旨在帮助开发者了解并掌握如何在Spring Boot项目中实现邮件的发送功能。 首先,...
在Java Web开发中,实现简单的电子邮件功能涉及到一系列的技术和组件,包括Servlet、JSP以及E-Mail相关的API。这里我们将深入探讨这些技术如何协同工作来构建一个基础的邮件系统。 首先,`E-Mail`是实现邮件功能的...
在本文中,我们将深入探讨如何在SpringBoot应用中集成电子邮件服务,以便能够发送各种类型的邮件。SpringBoot通过其内置的`spring-boot-starter-mail`模块提供了便捷的邮件发送功能,结合JDK的邮件API,我们可以轻松...
Java发送邮件是软件开发中常见的功能,Spring框架提供了一种优雅的方式来实现这一需求。Spring框架以其模块化和灵活性而著名,它包含了一个名为`JavaMailSender`的接口,专门用于处理电子邮件的发送。在这个场景中,...
在IT行业中,Spring框架是Java开发中的一个核心工具,它为构建高质量的、松散耦合的、可测试的...在实际开发中,你可能还需要考虑异常处理、模板引擎支持、多语言支持等方面,以提升邮件发送功能的完整性和用户体验。
在现代软件开发中,电子邮件服务作为一项基本功能被广泛应用于各类业务场景之中。对于采用Java技术栈的项目而言,JavaMail 是一个非常实用且强大的库,它提供了发送邮件所需的所有功能。本文档主要探讨如何在 Grails...
在实际开发中,你可能还需要处理错误情况,例如邮件发送失败,或者添加更多的功能,如模板邮件、多语言支持等。这个SpringBoot邮件发送Demo为你提供了一个基础的实现,你可以在此基础上根据具体需求进行扩展和优化。...
Java Spring 框架是企业级应用开发的强大工具,它提供了丰富的功能,包括但不限于依赖注入、AOP(面向切面编程)、数据...在实际开发中,可以根据具体需求进行调整和扩展,如集成邮件模板引擎,实现更强大的邮件服务。
还针对Web应用开发中如打印、图表、日志、上传、下载和国际化等常见功能特性的实现,综合运用多种JAVA EE开发技术,提出多种解决方案,并深入讲座分析,对开发人员动手开发实际项目具有借鉴意义。最后,通过三个综合...
在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建高质量的、可维护的、松耦合的应用程序提供了强大的支持。JavaMail API则是一个用于处理电子邮件的开放源码库,它允许开发者通过编程方式发送、接收和...
在Spring Boot应用中,实现邮件发送功能是一项常见的需求,它能够帮助我们自动化处理通知、确认订单、发送报告等任务。...在实际开发中,可以根据业务需求进行相应的扩展,比如添加邮件模板支持、错误处理机制等。
在E-Mail部分,可以看到用户可以拥有多个电子邮件地址,这可能涉及到邮箱验证和管理功能,确保用户信息的正确性和安全性。在实际开发中,可能会使用邮件服务发送验证链接或密码重置请求。 总的来说,这个课程不仅...
AppFuse 是一个开源项目,它提供了一种快速开发Java Web应用程序的方法。它的核心是一个Maven模块,包含了多种框架和技术的集成,如...在实践中不断探索,你会发现AppFuse是提升开发效率、规范项目结构的得力助手。
通过以上内容可以看出,这位JAVA软件工程师具有扎实的技术基础和丰富的实战经验,不仅掌握了多种开发技术和框架,还在多个实际项目中担任关键角色,展现了出色的项目管理和团队合作能力。此外,他还具备较强的学习...
在实际开发中,这些信息通常由后端控制器处理并传递到前端。控制器会从数据库查询用户信息,然后将结果放入模型(Model),再由Spring MVC或者Struts2等框架自动绑定到JSP页面上的EL表达式。 EL表达式的优势在于...
这些项目经验展示了应聘者在实际开发中的综合能力,包括需求分析、系统设计、数据库管理、前端开发以及团队协作等方面。这些经验表明,他具备较强的Java开发能力和实际项目经验,对于寻求Java工程师职位的应聘者来说...
Session是线程安全的,通常在整个应用中创建一个即可。 2. **Message**:表示一封邮件,包含了邮件的所有信息,如收件人、抄送人、主题、正文以及附件等。 3. **Transport**:负责将Message对象实际发送到邮件...