org.springframework.mail.javamail.MimeMessageHelper是处理JavaMail邮件时比较顺手组件之一。它可以让你摆脱繁复的JavaMail API。 通过使用MimeMessageHelper,创建一个MimeMessage实例将非常容易:
// of course you would use DI in any real-world cases
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo("test@host.com");
helper.setText("Thank you for ordering!");
sender.send(message);
发送附件和嵌入式资源(inline resources)
Multipart email允许添加附件和内嵌资源(inline resources)。内嵌资源可能是你在信件中希望使用的图像或样式表,但是又不想把它们作为附件。
附件
下面的例子将展示如何使用MimeMessageHelper来发送一封email,使用一个简单的JPEG图片作为附件:
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");
MimeMessage message = sender.createMimeMessage();
// use the true flag to indicate you need a multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo("test@host.com");
helper.setText("Check out this image!");
// let's attach the infamous windows Sample file (this time copied to c:/)
FileSystemResource file = new FileSystemResource(new File("c:/Sample.jpg"));
helper.addAttachment("CoolImage.jpg", file);
sender.send(message);
内嵌资源
下面的例子将展示如何使用MimeMessageHelper来发送一封含有内嵌资源的email:
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");
MimeMessage message = sender.createMimeMessage();
// use the true flag to indicate you need a multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo("test@host.com");
// use the true flag to indicate the text included is HTML
helper.setText("<html><body><img src='cid:identifier1234'></body></html>", true);
// let's include the infamous windows Sample file (this time copied to c:/)
FileSystemResource res = new FileSystemResource(new File("c:/Sample.jpg"));
helper.addInline("identifier1234", res);
sender.send(message);
警告
如你所见,嵌入式资源使用Content-ID(上例中是identifier1234)来插入到mime信件中去。你加入文本和资源的顺序是非常重要的。首先,你加入文本,随后是资源。如果顺序弄反了,它将无法正常运作!
使用模板来创建邮件内容
在之前的代码示例中,所有邮件的内容都是显式定义的,并通过调用message.setText(..)来设置邮件内容。 这种做法针对简单的情况或在上述的例子中没什么问题,因为在这里只是为了向你展示基础API。
而在你自己的企业级应用程序中, 基于如下的原因,你不会以上述方式创建你的邮件内容:
使用Java代码来创建基于HTML的邮件内容不仅容易犯错,同时也是一件单调乏味的事情
这样做,你将无法将显示逻辑和业务逻辑很明确的区分开
一旦需要修改邮件内容的显式格式和内容,你需要重新编写Java代码,重新编译,重新部署……
一般来说解决这些问题的典型的方式是使用FreeMarker或者Velocity这样的模板语言来定义邮件内容的显式结构。 这样,你的任务就是在你的代码中,只要创建在邮件模板中需要展示的数据,并发送邮件即可。通过使用Spring对FreeMarker和Velocity的支持类, 你的邮件内容将变得简单,这同时也是一个最佳实践。下面是一个使用Velocity来创建邮件内容的例子:
一个基于Velocity的示例
使用Velocity来创建你的邮件模板,你需要把Velocity加入到classpath中。 同时要根据应用的需要为邮件内容创建一个或者多个Velocity模板。下面的Velocity模板是这个例子中所使用的基于HTML的模板。 这只是一个普通的文本,你可以通过各种其他的编辑器来编辑该文本,而无需了解Java方面的知识。
# in the com/foo/package
<html>
<body>
<h3>Hi ${user.userName}, welcome to the Chipping Sodbury On-the-Hill message boards!</h3>
<div>
Your email address is <a href="mailto:${user.emailAddress}">${user.emailAddress}</a>.
</div>
</body>
</html>
下面提供了一些简单的代码与Spring XML配置,它们使用了上述Velocity模板来创建邮件内容并发送邮件。
package com.foo;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.ui.velocity.VelocityEngineUtils;
import javax.mail.internet.MimeMessage;
import java.util.HashMap;
import java.util.Map;
public class SimpleRegistrationService implements RegistrationService {
private JavaMailSender mailSender;
private VelocityEngine velocityEngine;
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public void setVelocityEngine(VelocityEngine velocityEngine) {
this.velocityEngine = velocityEngine;
}
public void register(User user) {
// Do the registration logic...
sendConfirmationEmail(user);
}
private void sendConfirmationEmail(final User user) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(user.getEmailAddress());
message.setFrom("webmaster@csonth.gov.uk"); // could be parameterized...
Map model = new HashMap();
model.put("user", user);
String text = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "com/dns/registration-confirmation.vm", model);
message.setText(text, true);
}
};
this.mailSender.send(preparator);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="mail.csonth.gov.uk"/>
</bean>
<bean id="registrationService" class="com.foo.SimpleRegistrationService">
<property name="mailSender" ref="mailSender"/>
<property name="velocityEngine" ref="velocityEngine"/>
</bean>
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
</beans>
分享到:
相关推荐
包含发送简单邮件、附件邮件、通过velocity模板发送邮件的工具类 所需要的jar文件 velocity-tools-1.4.jar velocity-tools-view-1.4.jar velocity-1.6.2.jar ...spring 的MimeMessageHelper 邮件引擎方法使用说明文档
项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件(文本格式的邮件、发送HTML格式的邮件、发送带附件 的邮件、...
本主题将深入探讨如何使用Spring框架发送电子邮件,特别是通过163邮箱服务进行邮件发送。首先,我们需要理解Spring的JavaMailSender接口,它是Spring提供用来发送电子邮件的核心组件。 1. **JavaMailSender接口**:...
本篇文章将深入探讨如何在Spring中使用Spring Mail进行电子邮件的发送。 首先,我们需要在项目中引入Spring Mail的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.spring...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail API**: 这是Java平台上的一个标准API,用于处理邮件相关任务,如创建、发送和接收邮件。它...
本项目聚焦于使用Spring Boot来开发一个支持多附件邮件发送的微服务平台。这个平台可以方便地集成到各种业务场景中,例如发送报告、通知或者用户验证邮件。 首先,我们需要了解Spring Boot的邮件服务模块——`...
- 在Spring应用中,我们需要配置JavaMailSender接口的实现,通常使用JavaMailSenderImpl类。这涉及到设置SMTP服务器的属性,如主机名(hostname)、端口号、用户名和密码。这些属性可以通过`application.properties...
在Spring Boot项目中,邮件服务的使用是相当常见的,它允许开发者向用户发送验证链接、通知、报告等信息。Spring Boot提供了对JavaMailSender接口的简单集成,使得配置和发送邮件变得非常便捷。本文将详细讲解如何在...
总结来说,Spring Mail为Java开发者提供了一种简单、高效的方式来发送电子邮件,通过配置SMTP服务器信息和使用`JavaMailSender`或`MimeMessageHelper`,我们可以轻松地创建和发送各种类型的邮件,包括HTML邮件和带...
SpringMail 是一个基于 Java 的库,它为使用 JavaMail API 发送电子邮件提供了便捷的抽象层。这个框架使得在 Spring 应用程序中集成邮件服务变得简单。本文将深入探讨 SpringMail 的核心概念、配置以及如何在实际...
6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...
Spring框架是Java开发中广泛使用的开源框架,它提供了一整套服务来简化企业级应用的开发。在Spring中,发送电子邮件的功能是通过Spring的Mail API实现的,这在系统监控、报警通知、用户验证等场景中非常常见。下面将...
Spring Mail 是一个基于Java的库,它为使用JavaMail API发送电子邮件提供了简洁的抽象层。在Spring框架中,Spring Mail简化了配置和邮件发送过程,使得开发者能够更专注于邮件内容的构建,而不是处理复杂的SMTP...
- 为避免暴露敏感信息,应使用环境变量或配置中心(如Spring Cloud Config)来存储邮件服务器的凭证。 - 对于大量邮件发送,考虑使用线程池以提高性能。 - 使用模板引擎(如FreeMarker或Thymeleaf)动态生成HTML...
在本文中,我们将深入探讨如何使用Spring框架来发送邮件,这是一个非常实用的功能,特别是在业务系统中通知用户、发送确认信息或进行客户服务时。 首先,我们需要了解Spring的邮件支持是通过`JavaMailSender`接口...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
下面将详细介绍 SpringMail 的使用及其核心概念。 1. **SpringMail 的集成** 在 Spring 应用程序中集成 SpringMail 需要在配置文件中设置 SMTP 服务器的相关参数,如主机名、端口、用户名和密码。这些可以通过 `...