在项目中邮件发送是一个比较常见的需求。SpringBoot 作为Web开发的工具自然集成了邮件发送。本博客以一个简单的实例:发送Text 邮件,来介绍实现邮件发送的需要注意的地方。
(1) 在http://start.spring.io/ 下载SpringBootDemo,然后打开eclipse 导入项目(前提,安装完成Jdk,eclipse,maven)
(2)在pom.xml中加入邮件插件
<!-- 邮件服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
(3)配置application.properties
# 邮件服务配置文件
spring.mail.host=smtp.163.com
# 用户名
spring.mail.username=XX@163.com
# 开启smtp 时设置的安全密码
spring.mail.password=xxxxxx
spring.mail.default-encoding=UTF-8
# 以谁来发送邮件
mail.fromMail.addr=XX@163.com
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
(3)在本Demo中主要实现一个Service 接口,接口中一个发送Text 的方法,和一个实现Service 的实现类,然后就是test目录下的Test
MailService.java
package com.example.demo.email.service;
public interface MailService {
public void sendTextMailService(String to,String subject,String content);
}
MailServiceImpl.java
package com.example.demo.email.service.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import com.example.demo.email.service.MailService;
/**
* 邮件服务的实现类
* @author asus
*
*/
@Component
public class MailServiceImpl implements MailService{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender sender;
@Value("${mail.fromMail.addr}")
private String from;
/**
* 发送一个简单的文字邮件
*/
@Override
public void sendTextMailService(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try{
sender.send(message);
logger.info("邮件已经发送出去");
} catch (Exception e) {
logger.error("邮件没有发送出去" + e);
}
}
}
Test
package com.example.demo.email.test;
import org.junit.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.SpringRunner;
import com.example.demo.email.service.MailService;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailTest {
@Autowired
private MailService mailService;
@Test
public void testSendTextMail(){
mailService.sendTextMailService("目标邮箱@qq.com","test simple mail"," hello this is simple mail");
}
}
然后运行Test ,可以看到发送成功。然后在你的目标的邮箱有你发送的邮件
=======================================================================================
上面是一个完整的简单Text 邮件的实现过程,当然只是一个Service
下面我们对实现的过程中可能出现的问题进行一次总结:
1) 邮件发送配置信息
首先是服务器,根据你使用的具体邮箱来具体设置。本Demo 使用的是个人版的163 邮箱,根据不同邮箱设置不同的邮箱的服务器。在这里我提供163邮箱的具体位置。(登录163邮箱,在首页的上方有一个设置,点击POP3/SMTP/IMAP)可以查看自己的服务器地址。
用户名:自己邮箱的账号
密码:这里的密码有些不同,不是你账号密码,而是客户端授权码,这个码,在163邮箱,POP3 下面有一个客户端授权码。这个授权码很重要是你发送邮件时验证必不可少的。也是你开启POP3/SMTP 时必须要设置,如果没有开启它们,是无法进行发送邮件的。
这里分享一个很容易出现问题的是: 先说说报错信息,授权失败 535,自己查看,SMTP等设置都没有问题,但是还是报错,这时你就需要注意的是,配置文件,=后不能加入空格,然后你的配置信息后面也不能有空格