项目中经常会遇到发送邮件的问题,有时还需要发送html格式的邮件,如果直接在java文件硬编码写html,那么维护起来将会非常麻烦,利用Velocity模板引擎可以解决这个问题,使得业务处理和视图渲染相分离,方便维护。

项目依赖:

<properties>
<springframework>4.2.6.RELEASE</springframework>
</properties>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${springframework}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.5</version>
</dependency>

接下写一个服务类,提供发送邮件的功能:

public class SendEmailService {

private JavaMailSender sender;

private VelocityEngine velocityEngine;

public void sendEmail() {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage mimeMessage) throws Exception {
//设置内容显示的编码格式
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, "UTF-8");
helper.setTo("wang704987562@vip.qq.com");
helper.setFrom("输入你的发送邮箱地址");
Map modal = new HashMap<>();
modal.put("userName", "wzx");
modal.put("emailAddress", "wang704987562@vip.qq.com");
String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "email_tempalte.vm", "UTF-8", modal);
helper.setSubject("邮件主题");
helper.setText(content, true);
}
};
this.sender.send(preparator);
}


public void setSender(JavaMailSender sender) {
this.sender = sender;
}

public void setVelocityEngine(VelocityEngine velocityEngine) {
this.velocityEngine = velocityEngine;
}
}

添加一个简单的模板文件:

<html>
<body>
<h3>Hi ${userName}, welcome to the Chipping Sodbury On-the-Hill message boards!</h3>

<div>
Your email address is ${emailAddress}.
</div>
</body>
</html>

在配置文件中配置bean:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.mxhichina.com"/>
<property name="username" value="输入发送邮箱地址"/>
<property name="password" value="输入发送邮箱密码"/>
</bean>
<bean id="sendEmailService" class="cn.ssm.service.SendEmailService">
<property name="sender" ref="mailSender"/>
<property name="velocityEngine" ref="velocityEngine"/>
</bean>
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<props>
<prop key="resource.loader">class</prop>
<prop key="class.resource.loader.class">
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</prop>
<!-- 配置引擎读取数据的编码格式 -->
<prop key="input.encoding">UTF-8</prop>
<!-- 配置引擎输出数据的编码格式 -->
<prop key="output.encoding">UTF-8</prop>
<prop key="default.contentType">application/x-www-form-urlencoded; charset=UTF-8</prop>
</props>
</property>
</bean>

注意:需要将代码替换成自己的邮箱帐号和密码,否则发送失败

最后,写个测试用例:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class SendEmailTest {

@Autowired
private SendEmailService emailService;

@Test
public void test() {
emailService.sendEmail();
}
}

运行后,效果如下:

可以正确显示html格式并显示中文。

更多相关文章

  1. android studio 解析Excel数据格式导入poi-3.17.jar时的一系列报
  2. 【Android实战】----Android Retrofit2.1.0设置编码格式GBK
  3. 在app引擎端点的启动时执行代码
  4. 纯Java开发的游戏引擎V0.5--DEMO2 -- 物理引擎
  5. js实现把整数秒转化为"hh:mm:ss"的时间格式.
  6. 在Java中包含运行JavaScript的引擎的原因是什么?
  7. JavaScript-C/C++ (SpiderMonkey) 引擎嵌入开发指南(中文向导)
  8. java开发编译器:中间语言格式
  9. BufferedImage到InputStream - 格式不同

随机推荐

  1. mall整合RabbitMQ实现延迟消息
  2. mall整合SpringSecurity和JWT实现认证和
  3. mall整合OSS实现文件上传
  4. mall在Windows环境下的部署
  5. Navicat实用功能:数据备份与结构同步
  6. mall整合SpringSecurity和JWT实现认证和
  7. 让Monad来得更猛烈些吧_Haskell笔记11
  8. mall整合SpringTask实现定时任务
  9. android sdk, adt编译问题
  10. A