2016手机网站制作规范,重启 iis 中的网站,怎么做好公司官网推广,网站建设代码容易出错在这篇文章中#xff0c;我将介绍如何使用Spring和Velocity格式化和发送自动电子邮件。 Spring仅提供创建简单文本电子邮件的功能#xff0c;这对于简单的情况很好#xff0c;但是在典型的企业应用程序中#xff0c;由于多种原因#xff0c;您不希望这样做#xff1a; 用… 在这篇文章中我将介绍如何使用Spring和Velocity格式化和发送自动电子邮件。 Spring仅提供创建简单文本电子邮件的功能这对于简单的情况很好但是在典型的企业应用程序中由于多种原因您不希望这样做 用Java代码创建基于HTML的电子邮件内容很繁琐且容易出错 显示逻辑和业务逻辑之间没有明确区分 更改电子邮件的显示结构需要编写Java代码重新编译重新部署等 通常解决这些问题的方法是使用诸如FreeMarker或Velocity之类的模板库来定义电子邮件内容的显示结构。 对于Podcastpedia我选择了Velocity这是Apache的免费开源基于Java的模板引擎。 最后我唯一的编码任务是创建要在电子邮件模板中呈现的数据并发送电子邮件。 我将基于Podcastpedia.org的真实场景进行演示 情境 在Podcastpedia.org的“ 提交播客”页面上我们鼓励访问者和播客生产者提交其播客以包括在我们的播客目录中。 提交播客后将自动生成一封电子邮件以通知我adrianmatei [AT] gmail DOT com和Podcastpedia人员联系[AT] podcastpedia DOT org。 现在让我们看看Spring和Velocity如何一起发挥作用 1.先决条件 弹簧设置 “ Spring框架提供了一个有用的实用程序库用于发送电子邮件该电子邮件使用户免受底层邮件系统的细节的侵扰并负责代表客户端进行低级资源处理。” [1] 1.1.1。 图书馆事务 为了能够使用Spring Framework的电子邮件库以下附加jar必须位于应用程序的类路径中。 JavaMail mail.jar库 JAF activation.jar库 我使用Maven加载了这些依赖关系因此这是pom.xml的配置片段 Spring邮件依赖 dependencygroupIdjavax.mail/groupIdartifactIdmail/artifactIdversion1.4.7/versionscopeprovided/scope
/dependency
dependencygroupIdjaf/groupIdartifactIdactivation/artifactIdversion1.0.2/versionscopeprovided/scope
/dependency速度设定 要使用Velocity创建电子邮件模板首先需要在类路径上提供Velocity库。 使用Maven您在pom.xml文件中具有以下依赖关系 Maven中的速度依赖性 !-- velocity --
dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity/artifactIdversion1.7/version
/dependency
dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-tools/artifactIdversion2.0/version
/dependency2.电子邮件通知服务 在成功提交播客之后我为电子邮件通知定义了EmailNotificationService接口。 它只有一项操作即将播客拟议的播客通知播客。 下面的代码显示了EmailNotificationServiceImpl 它是上述接口的实现 Java代码发送通知电子邮件 package org.podcastpedia.web.suggestpodcast;import java.util.Date;
import java.util.HashMap;
import java.util.Map;import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;import org.apache.velocity.app.VelocityEngine;
import org.podcastpedia.common.util.config.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.ui.velocity.VelocityEngineUtils;public class EmailNotificationServiceImpl implements EmailNotificationService {Autowiredprivate ConfigService configService; private JavaMailSender mailSender;private VelocityEngine velocityEngine;public void sendSuggestPodcastNotification(final SuggestedPodcast suggestedPodcast) {MimeMessagePreparator preparator new MimeMessagePreparator() {SuppressWarnings({ rawtypes, unchecked })public void prepare(MimeMessage mimeMessage) throws Exception {MimeMessageHelper message new MimeMessageHelper(mimeMessage);message.setTo(configService.getValue(EMAIL_TO_SUGGEST_PODCAST));message.setBcc(adrianmateigmail.com);message.setFrom(new InternetAddress(suggestedPodcast.getEmail()) );message.setSubject(New suggested podcast);message.setSentDate(new Date());Map model new HashMap(); model.put(newMessage, suggestedPodcast);String text VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocity/suggestPodcastNotificationMessage.vm, UTF-8, model);message.setText(text, true);}};mailSender.send(preparator); }//getters and setters omitted for brevity} 现在让我们看一下代码 JavaMailSender和MimeMessagePreparator org.springframework.mail软件包是Spring框架的电子邮件支持的根级软件包。 用于发送电子邮件的中央接口是MailSender接口但是我们使用的是org.springframework.mail.javamail.JavaMailSender接口第org.springframework.mail.javamail.JavaMailSender行该接口向MailSender接口添加了专门的JavaMail功能例如MIME消息支持从它继承了。 JavaMailSender还提供了用于准备JavaMail MIME消息的回调接口称为org.springframework.mail.javamail.MimeMessagePreparator (lines 26-42) org.springframework.mail.javamail.MimeMessagePreparator (lines 26-42) 。 MimeMessageHelper 处理JavaMail消息时另一个有用的类是org.springframework.mail.javamail.MimeMessageHelper类该类使您不必使用冗长的JavaMail API。 如您所见通过使用MimeMessageHelper 创建MimeMessage变得非常容易 MimeMessageHelper的用法 MimeMessageHelper message new MimeMessageHelper(mimeMessage);message.setTo(configService.getValue(EMAIL_TO_SUGGEST_PODCAST));message.setBcc(adrianmateigmail.com);message.setFrom(new InternetAddress(suggestedPodcast.getEmail()) );message.setSubject(New suggested podcast);message.setSentDate(new Date());速度引擎 接下来要注意的是如何创建电子邮件文本 使用Velocity模板创建电子邮件文本 Map model new HashMap();
model.put(newPodcast, suggestedPodcast);
String text VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, velocity/suggestPodcastNotificationMessage.vm, UTF-8, model);
message.setText(text, true); VelocityEngineUtils.mergeTemplateIntoString方法将指定的模板类路径中存在于Velocity文件夹中的suggestPodcastNotificationMessage.vm 与给定的模型模型–“ newPodcast”合并该模型包含将模型名称作为键并将模型对象作为值的映射。 您还需要指定要使用的velocityEngine 最后结果以字符串形式返回 2.3.1。 创建速度模板 您可以在下面看到在此示例中使用的Velocity模板。 请注意它是基于HTML的并且由于它是纯文本因此可以使用您喜欢HTML或文本编辑器来创建。 速度模板 htmlbodyh3Hi Adrian, you have a new suggested podcast!/h3pFrom - ${newMessage.name} / ${newMessage.email} /ph3Podcast metadataline /h3p${newMessage.metadataLine}/ph3With the message/h3p${newMessage.message}/p/body/htmlBean配置 让我们看看如何在应用程序上下文中配置所有内容 电子邮件服务配置 !-- ********************************* email service configuration ******************************* --
bean idsmtpSession classorg.springframework.jndi.JndiObjectFactoryBeanproperty namejndiName valuejava:comp/env/mail/Session/
/bean
bean idmailSender classorg.springframework.mail.javamail.JavaMailSenderImplproperty namesession refsmtpSession /
/bean
bean idvelocityEngine classorg.springframework.ui.velocity.VelocityEngineFactoryBeanproperty namevelocityPropertiesvalueresource.loaderclassclass.resource.loader.classorg.apache.velocity.runtime.resource.loader.ClasspathResourceLoader/value/property
/bean
bean idemailNotificationServiceSuggestPodcast classorg.podcastpedia.web.suggestpodcast.EmailNotificationServiceImplproperty namemailSender refmailSender/property namevelocityEngine refvelocityEngine/
/bean JavaMailSender具有对smtp会话的JNDI引用。 在Jetty9-gmail-account.xml文件中可以找到有关如何使用Google帐户配置电子邮件会话的通用示例。 VelocityEngineFactoryBean是配置VelocityEngine并将其提供为bean引用的工厂。 ClasspathResourceLoader是一个简单的加载器将从classpath加载模板 摘要 在本示例中您已经学习了如何使用Spring和Velocity在Java中编写HTML电子邮件。 您所需要做的就是邮件Spring和Velocity库编写电子邮件模板并使用那些简单的Spring帮助器类将元数据添加到电子邮件中并发送。 资源资源 源代码– GitHub存储库 播客网 org.podcastpedia.web.suggestpodcast.EmailNotificationService.java-电子邮件通知的Java接口 播客常见 src / main / resources / spring / pcm-common.xml –在Spring应用程序上下文中与电子邮件相关的Bean配置 网页 Spring电子邮件集成 Apache Velocity项目 翻译自: https://www.javacodegeeks.com/2014/07/how-to-compose-html-emails-in-java-with-spring-and-velocity.html