Spring boot 发送邮件
1、添加依赖
<!-- 发送邮件. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、配置application.properties
# 设置邮箱主机,以QQ邮箱为例子
spring.mail.host=smtp.qq.com
# 设置用户名,邮箱地址
spring.mail.username=XXX@qq.com
# 设置密码,此密码是授权码而不是qq邮箱密码
spring.mail.password=kjhleetwedyubbcc
# 设置是否需要认证,如果为true,那么用户名和密码就必须的,如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
spring.mail.properties.mail.smtp.auth=true
# STARTTLS[1] 是对纯文本通信协议的扩展。
# 它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
3、开启邮箱服务
登录QQ邮箱,进行设置,如下图。
设置完成之后,得到的授权码就是上面第二步设置的密码。
4、测试代码(不带附件)
package com.test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMailTest {
@Autowired
private JavaMailSender javaMailSender;
/*
* 修改application.properties的用户才可以发送
*/
@Test
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("xxx@qq.com");//发送者
message.setTo("xxx@qq.com");//接收者
message.setSubject("发送邮件测试");//标题
message.setText("邮件内容");//邮件内容
javaMailSender.send(message);//发送邮件
}
}
5、测试代码(带附件)
package com.test;
import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMailsTest {
@Autowired
private JavaMailSender mailSender;
/*
* 测试发送附件.(这里发送图片.)
*/
@Test
public void sendSimpleMail() throws MessagingException {
//这个是javax.mail.internet.MimeMessage下的
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//基本设置
helper.setFrom("747024934@qq.com");//发送者
helper.setTo("3067810776@qq.com");//接收者
helper.setSubject("图片");//邮件主题
helper.setText("附件测试");//邮件内容
//org.springframework.core.io.FileSystemResource下的:
//附件1,获取文件对象.
FileSystemResource resource = new FileSystemResource(new File("E:\\images\\1.jpg"));
//添加附件,这里第一个参数是在邮件中显示的名称,也可以直接是head.jpg,但是一定要有文件后缀,不然就无法显示图片了。
helper.addAttachment("美女.jpg", resource);
//附件2
FileSystemResource resource1 = new FileSystemResource(new File("E:\\images\\桌面1.jpg"));
helper.addAttachment("桌面.jpg", resource1);
mailSender.send(message);
}
}
6、测试代码(嵌入静态资源)
package com.test;
import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMails1Test {
@Autowired
private JavaMailSender mailSender;
/*
* 测试发送附件.(这里发送图片.),邮件中使用静态资源.
*/
@Test
public void sendSimpleMail() throws MessagingException {
//这个是javax.mail.internet.MimeMessage下的
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//基本设置
helper.setFrom("747024934@qq.com");//发送者
helper.setTo("3067810776@qq.com");//接收者
helper.setSubject("图片(邮件主题)");//邮件主题
// 邮件内容,第二个参数指定发送的是HTML格式
//说明:嵌入图片<img src='cid:head'/>,其中cid:是固定的写法,而images是一个contentId。
helper.setText("<body>这是图片:<img src='cid:images' /> </body>", true);//邮件内容
//org.springframework.core.io.FileSystemResource下的:
//附件1,获取文件对象.
FileSystemResource resource = new FileSystemResource(new File("E:\\images\\1.jpg"));
//添加附件,这里第一个参数是在邮件中显示的名称,也可以直接是head.jpg,但是一定要有文件后缀,不然就无法显示图片了。
helper.addInline("images", resource);
mailSender.send(message);
}
}
这里需要注意的是addInline函数中资源名称head需要与正文中cid:images对应起来
嵌入图片<img src='cid:images'/>,其中cid:是固定的写法,而images是一个contentId。
5、运行代码
如果以上都按步骤设置完成了,这是邮件发送成功。
参考博客:http://412887952-qq-com.iteye.com/blog/2305992