全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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了。

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


# spring  # 发送邮件  # email邮件发送  # java  # 邮件发送  # Spring Boot发送邮件详解  # 使用spring框架中的组件发送邮件功能说明  # Spring Boot 发送邮件功能案例分析  # springMVC发送邮件的简单实现  # Spring+quartz实现定时发送邮件功能实例  # Spring Boot实战之发送邮件示例代码  # Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)  # spring mail借助qq邮箱服务器发送邮件  # Spring学习笔记3之消息队列(rabbitmq)发送邮件功能  # Java的Spring框架中实现发送邮件功能的核心代码示例  # spring+maven实现发送邮件功能  # 可以使用  # 邮件服务器  # 就可以  # 到此  # 创建一个  # 自己的  # 第一个  # 多个  # 将其  # 就没  # 第二个  # 写了  # 还需要  # 有必要  # 中了  # 为例  # 所示  # 要将  # 在上面 


相关文章: h5网站制作工具有哪些,h5页面制作工具有哪些?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  制作企业网站建设方案,怎样建设一个公司网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星如何快速更换网站模板?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  电商平台网站制作流程,电商网站如何制作?  安徽网站建设与外贸建站服务专业定制方案  建站之星2.7模板:企业网站建设与h5定制设计专题  建站之星会员如何解锁更多建站功能?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何通过建站之星自助学习解决操作问题?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何在阿里云域名上完成建站全流程?  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何快速打造个性化非模板自助建站?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  宝塔建站无法访问?如何排查配置与端口问题?  如何用IIS7快速搭建并优化网站站点?  网站制作企业,网站的banner和导航栏是指什么?  如何规划企业建站流程的关键步骤?  建站之星如何一键生成手机站?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  北京的网站制作公司有哪些,哪个视频网站最好?  C#怎么创建控制台应用 C# Console App项目创建方法  建站与域名管理如何高效结合?  如何在云主机上快速搭建网站?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  建站之星×万网:智能建站系统+自助建站平台一键生成  广东专业制作网站有哪些,广东省能源集团有限公司官网?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何快速搭建高效可靠的建站解决方案?  广州美橙建站如何快速搭建多端合一网站?  建站org新手必看:2024最新搭建流程与模板选择技巧  如何快速完成中国万网建站详细流程?  ,柠檬视频怎样兑换vip?  如何通过免费商城建站系统源码自定义网站主题与功能?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  香港服务器选型指南:免备案配置与高效建站方案解析  C++中引用和指针有什么区别?(代码说明)  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  深圳网站制作的公司有哪些,dido官方网站?  湖北网站制作公司有哪些,湖北清能集团官网?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  h5在线制作网站电脑版下载,h5网页制作软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。