日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

如何使用Spring和Velocity在Java中编写HTML电子邮件

發(fā)布時(shí)間:2023/12/3 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用Spring和Velocity在Java中编写HTML电子邮件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在這篇文章中,我將介紹如何使用Spring和Velocity格式化和發(fā)送自動(dòng)電子郵件。 Spring僅提供創(chuàng)建簡(jiǎn)單文本電子郵件的功能,這對(duì)于簡(jiǎn)單的情況很好,但是在典型的企業(yè)應(yīng)用程序中,由于多種原因,您不希望這樣做:

  • 用Java代碼創(chuàng)建基于HTML的電子郵件內(nèi)容很繁瑣且容易出錯(cuò)
  • 顯示邏輯和業(yè)務(wù)邏輯之間沒有明確區(qū)分
  • 更改電子郵件的顯示結(jié)構(gòu)需要編寫Java代碼,重新編譯,重新部署等

通常,解決這些問題的方法是使用諸如FreeMarker或Velocity之類的模板庫(kù)來定義電子郵件內(nèi)容的顯示結(jié)構(gòu)。 對(duì)于Podcastpedia,我選擇了Velocity,這是Apache的免費(fèi)開源基于Java的模板引擎。 最后,我唯一的編碼任務(wù)是創(chuàng)建要在電子郵件模板中呈現(xiàn)的數(shù)據(jù)并發(fā)送電子郵件。

我將基于Podcastpedia.org的真實(shí)場(chǎng)景進(jìn)行演示

情境

在Podcastpedia.org的“ 提交播客”頁(yè)面上,我們鼓勵(lì)訪問者和播客生產(chǎn)者提交其播客,以包括在我們的播客目錄中。 提交播客后,將自動(dòng)生成一封電子郵件,以通知我(adrianmatei [AT] gmail DOT com)和Podcastpedia人員(聯(lián)系[AT] podcastpedia DOT org)。

現(xiàn)在讓我們看看Spring和Velocity如何一起發(fā)揮作用:

1.先決條件

彈簧設(shè)置

“ Spring框架提供了一個(gè)有用的實(shí)用程序庫(kù),用于發(fā)送電子郵件,該電子郵件使用戶免受底層郵件系統(tǒng)的細(xì)節(jié)的侵?jǐn)_,并負(fù)責(zé)代表客戶端進(jìn)行低級(jí)資源處理。” [1]

1.1.1。 圖書館事務(wù)

為了能夠使用Spring Framework的電子郵件庫(kù),以下附加jar必須位于應(yīng)用程序的類路徑中。

  • JavaMail mail.jar庫(kù)
  • JAF activation.jar庫(kù)

我使用Maven加載了這些依賴關(guān)系,因此這是pom.xml的配置片段:

Spring郵件依賴

<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version><scope>provided</scope> </dependency> <dependency><groupId>jaf</groupId><artifactId>activation</artifactId><version>1.0.2</version><scope>provided</scope> </dependency>

速度設(shè)定

要使用Velocity創(chuàng)建電子郵件模板,首先需要在類路徑上提供Velocity庫(kù)。

使用Maven,您在pom.xml文件中具有以下依賴關(guān)系:

Maven中的速度依賴性

<!-- velocity --> <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version> </dependency> <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-tools</artifactId><version>2.0</version> </dependency>

2.電子郵件通知服務(wù)

在成功提交播客之后,我為電子郵件通知定義了EmailNotificationService接口。 它只有一項(xiàng)操作,即將播客擬議的播客通知播客。

下面的代碼顯示了EmailNotificationServiceImpl ,它是上述接口的實(shí)現(xiàn):

Java代碼發(fā)送通知電子郵件

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("adrianmatei@gmail.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}

現(xiàn)在讓我們看一下代碼:

JavaMailSender和MimeMessagePreparator

org.springframework.mail軟件包是Spring框架的電子郵件支持的根級(jí)軟件包。 用于發(fā)送電子郵件的中央接口是MailSender接口,但是我們使用的是org.springframework.mail.javamail.JavaMailSender接口(第org.springframework.mail.javamail.JavaMailSender行),該接口向MailSender接口添加了專門的JavaMail功能,例如MIME消息支持(從它繼承了)。 JavaMailSender還提供了用于準(zhǔn)備JavaMail MIME消息的回調(diào)接口,稱為org.springframework.mail.javamail.MimeMessagePreparator (lines 26-42)
org.springframework.mail.javamail.MimeMessagePreparator (lines 26-42)
。

MimeMessageHelper

處理JavaMail消息時(shí),另一個(gè)有用的類是org.springframework.mail.javamail.MimeMessageHelper類,該類使您不必使用冗長(zhǎng)的JavaMail API。 如您所見,通過使用MimeMessageHelper ,創(chuàng)建MimeMessage變得非常容易:

MimeMessageHelper的用法

MimeMessageHelper message = new MimeMessageHelper(mimeMessage);message.setTo(configService.getValue("EMAIL_TO_SUGGEST_PODCAST"));message.setBcc("adrianmatei@gmail.com");message.setFrom(new InternetAddress(suggestedPodcast.getEmail()) );message.setSubject("New suggested podcast");message.setSentDate(new Date());

速度引擎

接下來要注意的是如何創(chuàng)建電子郵件文本:

使用Velocity模板創(chuàng)建電子郵件文本

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”)合并,該模型包含將模型名稱作為鍵并將模型對(duì)象作為值的映射。
  • 您還需要指定要使用的velocityEngine
  • 最后,結(jié)果以字符串形式返回

2.3.1。 創(chuàng)建速度模板

您可以在下面看到在此示例中使用的Velocity模板。 請(qǐng)注意,它是基于HTML的,并且由于它是純文本,因此可以使用您喜歡HTML或文本編輯器來創(chuàng)建。

速度模板

<html><body><h3>Hi Adrian, you have a new suggested podcast!</h3><p>From - ${newMessage.name} / ${newMessage.email} </p><h3>Podcast metadataline </h3><p>${newMessage.metadataLine}</p><h3>With the message</h3><p>${newMessage.message}</p></body></html>

Bean配置

讓我們看看如何在應(yīng)用程序上下文中配置所有內(nèi)容:

電子郵件服務(wù)配置

<!-- ********************************* email service configuration ******************************* --> <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName" value="java:comp/env/mail/Session"/> </bean> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="session" ref="smtpSession" /> </bean> <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"><property name="velocityProperties"><value>resource.loader=classclass.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</value></property> </bean> <bean id="emailNotificationServiceSuggestPodcast" class="org.podcastpedia.web.suggestpodcast.EmailNotificationServiceImpl"><property name="mailSender" ref="mailSender"/><property name="velocityEngine" ref="velocityEngine"/> </bean>
  • JavaMailSender具有對(duì)smtp會(huì)話的JNDI引用。 在Jetty9-gmail-account.xml文件中可以找到有關(guān)如何使用Google帳戶配置電子郵件會(huì)話的通用示例。
  • VelocityEngineFactoryBean是配置VelocityEngine并將其提供為bean引用的工廠。
  • ClasspathResourceLoader是一個(gè)簡(jiǎn)單的加載器,將從classpath加載模板

摘要

在本示例中,您已經(jīng)學(xué)習(xí)了如何使用Spring和Velocity在Java中編寫HTML電子郵件。 您所需要做的就是郵件,Spring和Velocity庫(kù),編寫電子郵件模板并使用那些簡(jiǎn)單的Spring幫助器類將元數(shù)據(jù)添加到電子郵件中并發(fā)送。

資源資源

源代碼– GitHub存儲(chǔ)庫(kù)

  • 播客網(wǎng)
    • org.podcastpedia.web.suggestpodcast.EmailNotificationService.java-電子郵件通知的Java接口
  • 播客常見
    • src / main / resources / spring / pcm-common.xml –在Spring應(yīng)用程序上下文中與電子郵件相關(guān)的Bean配置

網(wǎng)頁(yè)

  • Spring電子郵件集成
  • Apache Velocity項(xiàng)目
  • 翻譯自: https://www.javacodegeeks.com/2014/07/how-to-compose-html-emails-in-java-with-spring-and-velocity.html

    總結(jié)

    以上是生活随笔為你收集整理的如何使用Spring和Velocity在Java中编写HTML电子邮件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。