使用Spring发送Email
配置Spring发送邮件
Spring发送邮件底层还是使用JavaMail,我在http://www.cnblogs.com/lz2017/p/6882925.html 中记录过关于JavaMail的基础知识,这里就不再复述了。Spring Email需要导入的j关键ar包:
spring-context-support.jar
javax.mail.jar
Spring Emaile 抽象的核心是MailSender接口,MailSender接口的实现能够通过链接Email服务器实现发送邮件的功能(MailSender接口的实现把Emaile发送给邮件服务器,再由邮件服务器进行邮件投递)。Spring只带了一个MaileSender的实现:JavaMailSenderImpl,它底层就是在使用JavaMail 的API来发送Email。我们第一步先把这个实现类装配为Spring应用上下文的一个bean。
@Bean
public MailSender mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); //发送方smtp邮箱地址,账号,密码
mailSender.setHost("smtp.163.com");
mailSender.setUsername("18337953723");
mailSender.setPassword("return0;"); //设置编码
mailSender.setDefaultEncoding("utf-8"); return mailSender;
}
我们可以使用mailSender提供的setter方法进行一些设置,这里最基本的设置是发送端邮箱的SMTP地址,发送端邮箱账号和密码,编码方式。默认JavaMailSenderImpl假设邮件服务器监听25端口(标准SMTP端口),如果使用的邮件服务器使用不同的端口,可以设置port属性进行指定。
JavaMailSenderImpl配置好之后,它可以自动创建自己的邮件会话(javax.mail.MailSession)。如果使用了JNDI在服务器中设置了,我们就可以不用JavaMailSenderImpl的属性了,使用JndiObjectFactoryBean或<jee:jndi-lookup>去引用JNDI中的邮件会话,邮件会话就绪之后,通过JavaMailSenderImpl的setSession装配进去即可。
装配和使用邮件发送器
邮件发送器配置好之后,就下来就需要将其装配到使用它的bean中,使用@Autowired注解自动装配就好:
@Autowired
private MailSender mailSender;
接下来做的第一件事就是构造一个SimpleMailMessage实例,这个对象可以发送Email消息。
public void sendSimpleSpittleEmail(String to,String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("18337953723@163.com");
message.setTo(to);
message.setText(text);
mailSender.send(message);
}
setForm()和setTo()方法指定了Email的发送方和接收方。还可以通过setSubject()设置主题(邮件的标题),调用setText()方法来设置消息的内容。最后一步通过将消息发送给邮件发送器的send()方法,这封简单点的邮件就发出去了。
构建丰富内容的Email内容
在上边我们只是构建了一个可以发送简单文本的邮件,如果你需要发送带有附件的文件,或者是使用HTML来美化内容,那么就需要更进一步。
添加附件
发送带有附件的邮件关键在于创建Multipart内心的消息——Email由多个部分构成,其中一部分是Email体,其他部分是附件。我们先把MailSender强转为JavaMailSender类型,因为添加附件需要使用JavaMailSender中的方法:
JavaMailSender sender=(JavaMailSender)mailSender;
因为这里使用的是MailSender接口,如果直接使用其子接口JavaMailSender,这里就不用强转了。
为了能发送multipart类型的Email,SimpleMailMessage有些太简单了,我们需要创建一个MIME的消息,使用邮件发送器的createMimeMessage()方法:
MimeMessage message = sender.createMimeMessage();
javax.mail.internet.MimeMessage 本身的API一般我们不去直接使用,Spring提供了MimeMessageHelper可以帮助我们,我们需要实例化它并将MimeMessage传递给其构造器:
MimeMessageHelper helper = new MimeMessageHelper(message, true);
构造器的第二个参数为true,表明这个消息是multipart类型的。在这里我使用ClassPathRessource加载一个位于类路径下的资源(或者使用FileSystemResource根据文件路径去加载文件)
public void sendEmailAndAttachment(String to,String text) throws MessagingException {
JavaMailSender sender=(JavaMailSender)mailSender;
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom("18337953723@163.com");
helper.setTo(to);
helper.setSubject("New Email");
helper.setText(text);
//FileSystemResource image=new FileSystemResource("D:/12.png");
ClassPathResource image=new ClassPathResource("/images/12.png");
helper.addAttachment("12.png", image);
sender.send(message);
}
/images/12.png是我放在类路径下的一张图片,Maven项目具体位置为src/main/resources/images/12.png
发送富文本内容的HTML
只是发送富文本的内容与简单文本并没有太大不同,使用的都是setText()方法,只不过是将第二个参数设置为true,调用这个方法的时候,传给的值是HTML的内容就行了。在这里我们想将一个图片嵌入到内容中,也就是说给富文本(HTML)中的<img>标签的src属性赋值。
添加附件的方法使用的是addAttachment(),这里需要使用addInline()方法内联图片。
/**
* 富文本以及内联图片
* @param to
* @param text
* @throws MessagingException
*/
public void sendEmailInlineImage(String to,String text) throws MessagingException {
JavaMailSender sender=(JavaMailSender)mailSender;
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom("18337953723@163.com");
helper.setTo(to);
helper.setSubject("New Email");
helper.setText(text,true);
ClassPathResource image=new ClassPathResource("/images/12.png");
helper.addInline("logo", image);
sender.send(message);
}
我们在调用的时候给一个HTML的字符串:
@Test
public void test03() {
try {
String text="<html><body><img src='cid:logo'><h3>来自Spring</h3></body></html>";
mailService.sendEmailInlineImage("1105062331@qq.com", text);
} catch (MessagingException e) {
e.printStackTrace();
}
}
注意这个img标签的src属性值为cid:logo,前缀cid: 不要修改,“logo”这个名字需要与addInline()方法中指定的名保持一致。
将HTML内容作为字符串传递过去即操作不方便又无法看到效果,所以可以使用一些模板技术:JSP,FreeMarker,Velocity之类的。或者使用Spring中比较推荐的Thymeleaf,用这些技术布局Email的内容,然后将模板转换为String并传递给helper的setText()方法。
使用Spring发送Email的更多相关文章
- Spring 发送 Email
本文转自:http://zl198751.iteye.com/blog/757617 看到了本文,收获颇丰,感谢之至! 首先介绍下Email的发送流程: 需要选中smtp邮件服务器,Yahoo不提供免 ...
- 第19章-使用Spring发送Email
1 配置Spring发送邮件 Spring Email抽象的核心是MailSender接口.顾名思义,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如图19.1所示. 图1 ...
- 使用Spring 发送 Email !!!!
邮件服务器: 邮件服务器提供了邮件系统的基本结构,包括邮件传输,邮件分发,邮件存储等功能,以确保邮件能够发送到互联网中的任意地方. 邮件服务器就像我们生活中的邮局,为人们提供邮件服务.要保证邮件被正确 ...
- 使用spring 并加载模板发送Email 发邮件 java 模板
以下例子是使用spring发送email,然后加载到固定的模板,挺好的,大家可以试试 需要使用到spring-context 包 和 com.springsource.org.apache.veloc ...
- 利用Velocity结合Spring发email
在spring中发mail是一件容易的事,如果利用Velocity做mail的模板来发送就更得心应手了. 首先,还是简单描述sping中的配置,发mail需要一个mail的engin: <bea ...
- spring boot 学习(十)SpringBoot配置发送Email
SpringBoot配置发送Email 引入依赖 在 pom.xml 文件中引入邮件配置: <dependency> <groupId>org.springframework. ...
- java发送email
package com.assess.util; import java.io.File; import java.util.ArrayList; import java.util.List; imp ...
- 使用PHP发送email进行账号激活或者密码修改操作
使用PHPMailer编写发送邮件 PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式(qq邮箱最近做了限制,新开域名邮箱不再允许通过smtp协 ...
- 使用python原生的方法实现发送email
使用python原生的方法实现发送email import smtplib from email.mime.text import MIMEText from email.mime.multipart ...
随机推荐
- Android -- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短信拦截
1. 发送广播 使用以下三个API可以发送广播 public void click(View view){ Intent intent = new Intent(); intent.setAction ...
- CentOS环境Docker安装教程(官方推荐的docker三种方式安装)
CentOS环境Docker安装教程(官方推荐的docker三种方式安装) 一.使用yum方式安装 1.安装依赖包 $ sudo yum install -y yum-utils device-map ...
- 雷林鹏分享:Ruby Web Services 应用 - SOAP4R
Ruby Web Services 应用 - SOAP4R 什么是 SOAP? 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范. ...
- Oracle数据库空值操作
空值操作: null表示空的意思. 一.情况: 1:表中的任何字段默认情况下都可以为null值. 2:not null表示非空,是一种约束 设置为非空约束的字段,必须有有效值,不能为空. 3:插入数据 ...
- zookeeper的安装和部署
参考: https://testerhome.com/topics/11361 http://blog.csdn.net/lihao21/article/details/51778255 https: ...
- [vuex]——使用vuex解决模块间传值问题
二月的第四个周末,在家.受寒流的影响,深圳天气持续冰冻了好几天,天冷人就变得懒动,迷迷糊糊睡到了快十点,终于在饥饿的催促下起床. 和妹子吃完粥后,百无聊赖.透过窗户,发现太阳依旧没有露头的打算,我们也 ...
- linux下informatica服务安装和配置
本文中将会用infa简称代替informatica 1.安装前准备 介质名称 版本信息 描述 Informatica Powercenter 9.5.1 for Linux 64 bit 必须 Jav ...
- Alpha阶段敏捷冲刺---Day2
一.Daily Scrum Meeting照片 PS:不要问我们为什么少了个人,某位不愿说出姓名的大佬强行申请要拍照 二.今天冲刺情况反馈 今天我们依旧在五社区五号楼719进行我们的每日立会.经过昨天 ...
- scikit-learn 学习笔记-- Generalized Linear Models (二)
Lasso regression 今天介绍另外一种带正则项的线性回归, ridge regression 的正则项是二范数,还有另外一种是一范数的,也就是lasso 回归,lasso 回归的正则项是系 ...
- 量化分析:把Tushare数据源,规整成PyalgoTrade所需格式
量化分析:把Tushare数据源,规整成PyalgoTrade所需格式 分析A股历史数据,首先需要确定数据来源.如果只想做日k线.周k线的技术分析,可以用PyalgoTrade直接从yahoo.goo ...