Springboot发送邮件
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、测试代码(不带附件)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMailTest {
@Autowired
private JavaMailSender javaMailSender;
/** 修改application.properties的用户才可以发送*/@Testpublic void sendSimpleMail(){SimpleMailMessage message=new SimpleMailMessage();message.setFrom("xxx@qq.com");//发送者message.setTo("xxx@qq.com");//接收者message.setSubject("发送邮件测试");//标题message.setText("邮件内容");//邮件内容javaMailSender.send(message);//发送邮件}}
5、测试代码(带附件)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMailsTest {
@Autowired
private JavaMailSender mailSender;
/** 测试发送附件.(这里发送图片.)*/@Testpublic 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);//附件2FileSystemResource resource1=new FileSystemResource(new File("E:\images\桌面1.jpg"));helper.addAttachment("桌面.jpg",resource1);mailSender.send(message);}
}
6、测试代码(嵌入静态资源)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMails1Test {
@Autowired
private JavaMailSender mailSender;
/** 测试发送附件.(这里发送图片.),邮件中使用静态资源.*/@Testpublic 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、运行代码
如果以上都按步骤设置完成了,这是邮件发送成功。