使用Spring的JAVA Mail支持简化邮件发送功能

闲来无事,翻看《Spring in Action》,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多。

Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类JavaMailSenderImpl,这个类是发送邮件的核心类。可以通过在配置文件中配置使用,当然也可以自己硬编码到代码中(方便起见,下面的演示代码都是硬编码到代码中,省得配置麻烦)。

Spring提供的邮件发送不仅支持简单邮件的发送、添加附件,而且还可以使用velocity模板控制页面样式(应该也支持freemarker)。

首先对加入相应Spring jar包和Java Mail 的jar包。

我们首先得声明一个MailSender对象,因为MailSender对象只有两个重载的send(...)方法,显得有些简陋,我们建议选用JavaMailSender接口,或者干脆直接使用实现类,JavaMailSenderImpl。笔者是使用的JavaMailSenderImpl对象,功能丰富。

声明JavaMailSenderImpl对象,并在构造函数中初始化(当然也可以使用IoC容器初始化):

public class SpringMailSender
 {

 //
 Spring的邮件工具类,实现了MailSender和JavaMailSender接口
 private JavaMailSenderImpl
 mailSender;

 public SpringMailSender()
 {
 //
 初始化JavaMailSenderImpl,当然推荐在spring配置文件中配置,这里是为了简单
 mailSender
 = new JavaMailSenderImpl();
 //
 设置参数
 mailSender.setHost("smtp.qq.com");
 mailSender.setUsername("mosaic@qq.com");
 mailSender.setPassword("asterisks");
 ...

得到了MailSender对象之后,就可以发送邮件了,下面是示例代码,没有封装,仅供参考。

1、发送简单邮件

/**
 *
 简单邮件发送
 *
 */
public void simpleSend()
 {
 //
 构建简单邮件对象,见名知意
 SimpleMailMessage
 smm = new SimpleMailMessage();
 //
 设定邮件参数
 smm.setFrom(mailSender.getUsername());
 smm.setTo("mosaic@126.com");
 smm.setSubject("Hello
 world");
 smm.setText("Hello
 world via spring mail sender");
 //
 发送邮件
 mailSender.send(smm);
}

2、发送带附件的邮件

/**
 *
 带附件的邮件发送
 *
 *
 @throws MessagingException
 */
public void attachedSend()
throws MessagingException
 {
 //使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容
 MimeMessage
 msg = mailSender.createMimeMessage();
 //创建MimeMessageHelper对象,处理MimeMessage的辅助类
 MimeMessageHelper
 helper = new MimeMessageHelper(msg,
true);
 //使用辅助类MimeMessage设定参数
 helper.setFrom(mailSender.getUsername());
 helper.setTo("mosaic@126.com");
 helper.setSubject("Hello
 Attachment");
 helper.setText("This
 is a mail with attachment");
 //加载文件资源,作为附件
 ClassPathResource
 file = new ClassPathResource(
   "Chrysanthemum.jpg");
 //加入附件
 helper.addAttachment("attachment.jpg",
 file);
 //发送邮件
 mailSender.send(msg);
}

3、发送富文本邮件

/**发送富文本邮件
 *
 @throws MessagingException
 */
public void richContentSend()
throws MessagingException
 {
 MimeMessage
 msg = mailSender.createMimeMessage();

 MimeMessageHelper
 helper = new MimeMessageHelper(msg,
true);

 helper.setFrom(mailSender.getUsername());
 helper.setTo("mosaic@126.com");
 helper.setSubject("Rich
 content mail");
 //第二个参数true,表示text的内容为html,然后注意<img/>标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件
 helper.setText(
   "<body><p>Hello
 Html Email</p><img src='cid:file'/></body>",
   true);

 FileSystemResource
 file = new FileSystemResource(
   "C:\\Users\\Public\\Pictures\\Sample
 Pictures\\Chrysanthemum.jpg");
 helper.addInline("file",
 file);

 mailSender.send(msg);
}

 4、使用Velocity模板确定邮件风格

使用Velocity模板,需要Velocity的jar包,可以在官方网站下载,并加入ClassPath,然后需要声明一个VelocityEngine对象,具体的参考下面代码,这是笔者第一次使用Velocity,不甚了解,言多有失,望见谅。

声明一个VelocityEngine对象,并在构造函数中初始化(IoC is optional)

...
private VelocityEngine
 velocityEngine;

public SpringMailSender()
 {
  ...
 //
 Velocity的参数,通过VelocityEngineFactoryBean创建VelocityEngine,也是推荐在配置文件中配置的
 Properties
 props = System.getProperties();
 props.put("resource.loader",
"class");
 props
   .put("class.resource.loader.class",
     "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
 VelocityEngineFactoryBean
 v = new VelocityEngineFactoryBean();
 v.setVelocityProperties(props);
 try {
  velocityEngine
 = v.createVelocityEngine();
 }
catch (VelocityException
 e) {
  e.printStackTrace();
 }
catch (IOException
 e) {
  e.printStackTrace();
 }

}

简单的Velocity模板文件(index.vm):

<html>
<head>
<style type="text/css">
h4{
 color:red;
 background:#efefef;
}
</style>
</head>
<body>
<h4>${user}
 </h4>
<p><p>
<i>${content}</i>
</body>
</html>

开起来貌似很容易理解,只是普通的Html文件,使用了一些${placeholder}作为占位符。

Java要做的,就是加载模板,并将相应的值插入到占位符当中。

/**
 *
 使用Velocity模板发送邮件
 *
 *
 @throws MessagingException
 */
public
 void templateSend() throws MessagingException {
 //
 声明Map对象,并填入用来填充模板文件的键值对
 Map<String,
 String> model = new HashMap<String,
 String>();
 model.put("user",
 "MZULE");
 model.put("content",
 "Hello");
 //
 Spring提供的VelocityEngineUtils将模板进行数据填充,并转换成普通的String对象
 String
 emailText = VelocityEngineUtils.mergeTemplateIntoString(
   velocityEngine,
 "index.vm", model);
 //
 和上面一样的发送邮件的工作
 MimeMessage
 msg = mailSender.createMimeMessage();
 MimeMessageHelper
 helper = new MimeMessageHelper(msg, true);
 helper.setFrom(mailSender.getUsername());
 helper.setTo("mosaic@126.com");
 helper.setSubject("Rich
 content mail");
 helper.setText(emailText,
 true);

 mailSender.send(msg);
}

Spring可谓是大大简化了邮件的发送步骤,虽然我们自己封装可能实现起来并不复杂,但是,有现成的有何必要重新造轮子呢?(当然造轮子可以学到很多)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现带附件的邮件发送功能

    本文实例为大家分享了Java实现邮件发送功能的具体代码,供大家参考,具体内容如下 1.需要导入mail.jar.activation.jar这两个邮件发送的jar包,可在网上搜索并下载 2.需要设置相关邮箱服务器,我用的是QQ邮箱,操作如下所示:开启相关服务,并生产授权码(这个代码中会用到). 代码如下所示: package com.ecg.controller; import java.io.UnsupportedEncodingException; import java.security.

  • 基于JavaMail实现邮件发送

    通过javamail 实现发送邮件,供大家参考,具体内容如下 注意:服务器有些端口是没有开放的 需要去开放端口. 有些邮箱是需要开启对应授权服务的. 1.maven依赖: <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --> <dependency > <groupId >javax.mail </groupId > <artifactId >mail <

  • JavaEE实现基于SMTP协议的邮件发送功能

    本博客介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实也是Foxmail邮箱 先要了解一下SMTP协议和SSL加密 SMTP:称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效.可靠的邮件传输.SMTP是一种请求响应的协议,也就是客户机向远程服务器发送请求,服务器响应,监听端口是25,所以其工作模式有两种:发送SMTP,接收SMTP SSL加密:用来保障浏

  • java邮件发送简单实现代码

    本文实例为大家分享了java邮件发送的具体代码,供大家参考,具体内容如下 我用的是maven项目,前台页码不多说,自己传邮箱地址进来就行. 只需要一个类实现,直接复制就可以 package com.mail; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import

  • Java HtmlEmail 邮件发送的简单实现代码

    Java 项目中常常回遇到发送邮件 Java 发送邮件有几种,今天先给大家介绍用 HtmlEmail 来发送邮件,我这里是用 Maven 来搭建的 HtmlEmail 可以抄带HTML 首先 需要导入jar 包 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</versio

  • java网上商城开发之邮件发送功能(全)

    最近在学习网上商城时,接触到了一个邮件发送的功能.之前一直在使用邮箱进行发送邮件,但是其中的具体如何运转的却不知道是怎么回事.那么邮件发送究竟是怎么一回事呢? 邮件发送过程: 过程描述:首先是发送人将邮件通过客户端软件发送到特定的服务器上,然后通过电子邮件简单传输协议(SMTP)来进行传输,收件人通过POP3协议将邮件从服务器上接受回来.这样就实现了邮件之间的相互传送. 实现过程: 在有网络的情况下,我们可以直接使用搜狐.网易等邮箱进行发送.那么如何在没有网络的情况下,实现内部之间的发送呢? 首

  • 基于JavaMail的Java实现简单邮件发送功能

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件. 1. 电子邮件协议 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP.其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议.SMTP 是

  • Java实现邮件发送遇到的问题

    发送邮件的代码是我从以前的一个应用上直接拷贝过来的.以前使用的腾讯的邮件服务,程序执行起来没有任何问题.后来修改为微软office365邮件服务后,却遇到了两个问题. 问题一,tls加密设置 异常信息如下: 复制代码 代码如下: Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonym

  • 基于JavaMail的Java实现复杂邮件发送功能

    上一篇文章 基于 JavaMail 的 Java 邮件发送:简单邮件发送 讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤.本文将介绍如何创建并发送一封包含图片和附件的复杂邮件. 一封复杂的邮件内容可以看做是由很多节点(或者可以说是"片段"/"部分"/"零件")组成,文本.图片.附件等都可以看成是邮件内容中的一个节点.这些节点之间又可以相互关联组合成一个节点.最终组合成一个大节点就是邮件的正文内容. 完整代码演示: p

  • java邮件发送的实现

    邮件是在日常生活中,这篇文章主要介绍了java实现基于SMTP发送邮件的方法,实例分析了java基于SMTP服务发送邮件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 1.写一个 MailSendProper 类封装需要的属性 import java.util.Properties; public class MailSendProper { private String Host ; //发送邮件服务器的ip private String Port ; //发送邮件服务器的端口号 p

随机推荐