Java使用Spring发送邮件的实现代码

Spring Email抽象的核心是MailSender接口,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如下图:

Spring自带一个MailSender的实现就是JavaMailSenderImpl,它也是使用JavaMail API来发送Email,在使用之前,必须先将JavaMailSenderImpl装配为Spring应用上下文中的一个bean,如下所示:

@Bean
public MailSender mailSender (Environment env) {
  JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
  mailSender.setHost(env.getProperty("mailserver.host"));
  return mailSender;
} 

默认情况下,JavaMailSenderImpl假设邮件服务器监听25端口,如果邮件服务器监听不同的端口,可以使用port属性指定其端口号,在上面的mailSender()方法中添加:

mailSender.setPort(env.getProperty("mailserver.port")); 

如果邮件服务器需要认证的话,还需要设置username和password:

mailSender.setUsername(env.getProperty("mailserver.username"));
mailSender.setPassword(env.getProperty("mailserver.password")); 

这样JavaMailSenderImpl已经配置完成,到此可以创建自己的邮件会话,如果已经在JNDI中配置了javax.mail.MailSession的话就没有必要为JavaMailSenderImpl配置详细的服务器细节了,可以配置它使用JNDI中已就绪的MailSession。

使用JndiObjectFactoryBean,可以在如下的@Bean方法中配置一个bean,它会从JNDI中查找MailSession:

@Bean
public JndiObjectFactoryBean mailSession ( ) {
  JndiObjectFactoryBean jndi = new JndiObjectFactoryBean();
  jndi.setJndiName("mail/Session");
  jndi.setProxyInterface(MailSession.class);
  jndi.setResourceRef(true);
  return jndi;
}

接着可以使用Spring的<jee:jndi-lookup>元素从JNDI中获取对象,这里可以使用<jee:jndi-lookup>来创建一个bean,它引用了JNDI中的邮件会话:

代码如下:

<jee:jndi-lookup id="mailSession" jndi-name="mail/Session" resource-ref="true">

邮件会话准备好后,就可以将其装配到mailSender bean中了:

@Bean
public MailSender mailSender (MailSession mailSession) {
  JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
  mailSender.setSession(mailSession);
  return mailSender;
} 

通过将邮件会话装配到JavaMailSenderImpl的session属性中,就完全替换了原来的服务器配置,现在邮件会话完全通过JNDI进行配置和管理,JavaMailSenderImpl就可以专注于发送邮件而不必自己处理邮件服务器了。

接着需要将mailSender装配到我们的业务层实现类中(假设为SpitterEmailServiceImpl类),如下:

@Autowired
JavaMailSender mailSender; 

接着想要给Spitter用户发送Email提示他的朋友写了新的Spittle,这时需要一个方法来发送Email,这个方法要接受Email地址和Spittle对象信息,如下方法就是使用邮件发送器完成该功能:

public void sendSimpleSpittleEmail (Stirng to, Spittle spittle) {
  SimpleMailMessage message = new SimpleMailMessage();
  String spitterName = spittle.getSpitter().getFullName();
  message.setFrom("...@spitter.com"); // email地址
  message.setTo(to);
  message.setSubject("New spittle from " + spitterName);
  message.setText(spitterName + "says: " + spittle.getText());
  mailSender.send(message);
}

上面代码中最后一步将消息传递给邮件发送器的send()方法,这样邮件就发送出去了。

发送带附件的Email

消息发送成功了,现在尝试发送带有附件的Email,要发送附件先要创建multipart类型的消息,Email由多个部分组成,其中一部分是Email体,其他部分就是附件。要发送multipart类型的Email,需要创建一个MIME的消息,可以从邮件发送器的createMimeMessage( )方法开始:

MimeMessage message = mailSender.createMimeMessage(); 

不过这里使用javax.mail.internet.MimeMessage的API相对有点繁琐,可以使用Spring提供的MimeMessageHelper简便操作,实例化它时将MimeMessage传给它。

代码如下:

MimeMessageHelper helper = new MimeMessageHelper(message, true);  // true表示是multipart类型

得到MimeMessageHelper实例后,就可以开始组装Email消息了:

String spitterName = spittle.getSpitter().getFullName();
helper.setForm("...@spitter.com");
helper.setTo(to);
helper.setSubject("New spittle from " + spitterName);
helper.setText(spitterName + " says: " +spittle.getText()); 

下面添加附件,以图片为例,只要将这个资源传递给helper的addAttachment方法即可:

 FileSystemResource image = new FileSystemResource("/file/test.png");
helper.addAttachment("test.png", image); 

这里使用Spring的FileSystemResource来加载位于类路径下的test.png,再调用addAttachment(),第一个参数是要添加到Email中附件的名称,第二个参数是资源文件。

到这里multipart类型的Email已经构建完成,现在就要使用MimeMessageHelper发送带有附件的Email,完整代码如下:

public void sendSpittleEmailWithAttachment (Stirng to, Spittle spittle) throws MessagingException {
  MimeMessage message = mailSender.createMimeMessage();
  MimeMessageHelper helper = new MimeMessageHelper(message, true);
  String spitterName = spittle.getSpitter().getFullName();
  helper.setForm("...@spitter.com");
  helper.setTo(to);
  helper.setSubject("New spittle from " + spitterName);
  helper.setText(spitterName + " says: " +spittle.getText());
  FileSystemResource image = new FileSystemResource("/file/test.png");
  helper.addAttachment("test.png", image);
  mailSender.send(message);
}

到此就成功发送一个带有附件的Email了。

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

(0)

相关推荐

  • Java的Spring框架中实现发送邮件功能的核心代码示例

    Spring中已经封装了邮件操作类,通过spring配置文件可以便捷地注入到controller.action等地方. 下面是配置: <!-- mail sender --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="${mail.host}" p:port="${mail.por

  • 使用spring mail发送html邮件的示例代码

    序 本文展示一下如何使用spring mail来发送html邮件. maven <!-- email --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 发送图片 public void send(String from, St

  • spring mail借助qq邮箱服务器发送邮件

    spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--"账户",打开smtp服务,生成授权码 生成授权码需要验证手机,接下来用qq邮箱账号和授权码就可以发送邮件了,不需要qq密码 spring mail服务在spring-context-support中,配置依赖,然后就可以借助qq邮箱提供的发件服务器发送邮件了 <dependency>

  • Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)

    快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 如其他自动化配置模块一样,在完成了依赖引入之后,只需要在applicatio

  • 使用spring实现邮件的发送实例(含测试,源码,注释)

    此篇主要讲的是使用spring配置实现邮件发送,与之前的底层实现简便了不少,只需要几个配置就可以了,那么请往下看: 先写个接口 /** * @Title: IMailserdService.java * @Package org.service * @Description: TODO该方法的主要作用: * @author A18ccms A18ccms_gmail_com * @date 2017-5-30 上午10:36:34 * @version V1.0 */ package org.s

  • Java使用Spring发送邮件的实现代码

    Spring Email抽象的核心是MailSender接口,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如下图: Spring自带一个MailSender的实现就是JavaMailSenderImpl,它也是使用JavaMail API来发送Email,在使用之前,必须先将JavaMailSenderImpl装配为Spring应用上下文中的一个bean,如下所示: @Bean public MailSender mailSender (Environment en

  • java.mail实现发送邮件

    本文实例为大家分享了java.mail实现发送邮件的具体代码,供大家参考,具体内容如下 前提条件: 需要对邮箱做出设置,开启 : POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV等服务 一方面是接收这些代理服务器发送的邮件 另一方面就是让邮箱接受这些邮件协议的代理 在登录的时候,就是用户名和授权码,进行登录 获取授权码的过程:直接百度搜索就有结果,这里不再赘述 demo 这里需要引入javax.mail jar包 package test; ///** // * //

  • java实现简单发送邮件功能

    本文实例为大家分享了java实现简单发送邮件的具体代码,供大家参考,具体内容如下 添加依赖 <!--发送邮件API-->     <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->     <dependency>       <groupId>javax.mail</groupId>       <artifactId>javax.mail-ap

  • Java通过JavaMail发送邮件功能

    本文实例为大家分享了Java通过JavaMail发送邮件的具体代码,供大家参考,具体内容如下 这里我用的是SpringBoot项目 1.引入相关jar包 <!--java-email-->   <dependency>    <groupId>com.sun.mail</groupId>    <artifactId>javax.mail</artifactId>    <version>1.6.2</version

  • java实现发送邮件的示例代码

    代码 import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import javax.mail.Session; import javax.mail.MessagingException; import javax.mail.Transport; /** * @author BuNuo */ public

  • Java中Spring Boot支付宝扫码支付及支付回调的实现代码

    前言:最近开发支付宝支付功能,总结一下做个分享 官方文档:https://opendocs.alipay.com/apis 支付宝沙箱地址: https://openhome.alipay.com/platform/appDaily.htm?tab=info 支付宝支付流程: 准备工作:获取支付宝沙箱数据(APPID,支付宝网关,RSA2秘,沙箱支付账号等) 集成SpringBoot,使用Java代码发起支付请求 支付宝收到支付请求后,返回HTML代码片段,用于前端展示二维码 扫码支付成功后,支

  • java使用spring实现发送mail的方法

    本文实例讲述了java使用spring实现发送mail的方法.分享给大家供大家参考.具体如下: 这里借鉴别人的优点以及自己的一些加工,写出如下代码: package test; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframework.mail.SimpleMailMessage; imp

  • 实例讲解Java的Spring框架中的控制反转和依赖注入

    近来总是接触到 IoC(Inversion of Control,控制反转).DI(Dependency Injection,依赖注入)等编程原则或者模式,而这些是著名 Java 框架 Spring.Struts 等的核心所在.针对此查了 Wikipedia 中各个条目,并从图书馆借来相关书籍,阅读后有些理解,现结合书中的讲解以及自己的加工整理如下: eg1 问题描述: 开发一个能够按照不同要求生成Excel或 PDF 格式的报表的系统,例如日报表.月报表等等.   解决方案: 根据"面向接口编

  • Java编程redisson实现分布式锁代码示例

    最近由于工作很忙,很长时间没有更新博客了,今天为大家带来一篇有关Redisson实现分布式锁的文章,好了,不多说了,直接进入主题. 1. 可重入锁(Reentrant Lock) Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁. public void testReentrantLock(RedissonClient redisson){ RLock lock = redisson.getL

  • javamail 发送邮件的实例代码分享

    注意:要先导入javamail的mail.jar包.以下三段代码是我的全部代码,朋友们如果想用,直接复制即可.第一个类:MailSenderInfo.java 复制代码 代码如下: package com.util.mail;import java.util.Properties;/** * 发送邮件需要使用的基本信息 */public class MailSenderInfo {    //发送邮件的服务器的IP和端口    private String mailServerHost;   

随机推荐