• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java使用Spring发送邮件的实现代码

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

作者:weknow619 字体:[增加 减小] 来源:互联网 时间:2017-05-28

weknow619 通过本文主要向大家介绍了java spring是什么,java spring框架,java中spring框架,java spring,java spring mvc等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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;
} 
</div>

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

mailSender.setPort(env.getProperty("mailserver.port")); 
</div>

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

mailSender.setUsername(env.getProperty("mailserver.username"));
mailSender.setPassword(env.getProperty("mailserver.password")); 
</div>

这样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;
} 

</div>

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

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

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

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

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

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

@Autowired
JavaMailSender mailSender; 
</div>

接着想要给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);
} 

</div>

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

发送带附件的Email

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

MimeMessage message = mailSender.createMimeMessage(); 
</div>

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

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

得到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()); 
</div>

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

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

这里使用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);
} 

</div>

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理
  • 2017-05-28Spring Boot开发Web应用详解
  • 2017-05-28Spring中BeanFactory解析bean详解
  • 2017-05-28Java正则验证电话,手机,邮箱,日期,金额的方法示例
  • 2017-05-28关于Java变量的声明、内存分配及初始化详解
  • 2017-05-28java 中继承和多态详细介绍
  • 2017-05-28详解Spring整合Quartz实现动态定时任务
  • 2017-05-28Java thrift服务器和客户端创建实例代码
  • 2017-05-28java 读取本地文件实例详解
  • 2017-05-28判断二叉树是否为完全二叉树的实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解Spring注解--@Autowired、@Resource和@Service
    • java(jdk)环境变量配置(XP、win7、win8)图文教程详解
    • Java微信公众平台开发(10) 微信自定义菜单的创建实现
    • Java进阶:Struts多模块的技巧
    • Decode String
    • Java中的== 和equals()方法详解与实例
    • java加载properties文件的六种方法总结
    • 初识Spring Boot框架和快速入门
    • 深入jetty的使用详解
    • java中的interface接口实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有