SpringBoot邮箱服务

对于邮箱通知,可以使用 JavaMail 相关 api 来写发送邮件的相关代码,后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的过程,在之后 Spring Boot 对此进行了封装就有了现在的 spring-boot-starter-mail

邮箱服务

  • SMTP:全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
  • IMAP:全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
  • POP3:全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。

使用之前在响应邮箱中开启响应服务即可

常用邮箱服务地址

QQ邮箱(mail.qq.com):
POP3服务器地址:pop.qq.com(端口:110)
SMTP服务器地址:smtp.qq.com(端口:25)
SMTP服务器需要身份验证。

网易邮箱(163.com):
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)

谷歌邮箱(google.com):
POP3服务器地址:pop.gmail.com(SSL启用端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用端口:587)

阿里云邮箱(mail.aliyun.com):
POP3服务器地址:pop3.aliyun.com(SSL加密端口:995;非加密端口:110)
SMTP服务器地址:smtp.aliyun.com(SSL加密端口:465;非加密端口:25)
IMAP服务器地址:imap.aliyun.com(SSL加密端口:993;非加密端口:143)

新浪邮箱(sina.com):
POP3服务器地址:pop3.sina.com.cn(端口:110)
SMTP服务器地址:smtp.sina.com.cn(端口:25)

以163邮箱为例

开通POP3服务

准备一个163账号,登录PC端,找到并开启POP3/SMTP/IMAP。如下图所示:

img点击并拖拽以移动

开启之后会得到一个授权码,先保存下这个授权码。

引入SpringBoot封装依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

配置文件

spring:
  mail:
    host: smtp.163.com
    username: sovzn_7@163.com   #登录用户名
    password: 刚刚自己设置的授权码
    default-encoding: utf-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

邮件信息VO

@Data
public class MailDTO implements Serializable {

    /**
     * 接受邮箱账户
     */
    private String mail;

    /**
     * 邮箱标题
     */
    private String title;

    /**
     * 要发送的内容
     */
    private String content;

}

Service

public interface MailService {
    public void send(MailDTO mailDTO);
}
/**
 * @author Shiyaochang
 * 邮箱发送实现类
 */
@Service
@Component
public class MailServiceImpl implements MailService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    private MailSender mailSender;

    @Override
    public void send(MailDTO mailDTO) {
        // new 一个简单邮件消息对象
        SimpleMailMessage message = new SimpleMailMessage();
        // 和配置文件中的的username相同,相当于发送方
        message.setFrom("sovzn_7@163.com");
        // 收件人邮箱
        message.setTo(mailDTO.getMail());
        // 标题
        message.setSubject(mailDTO.getTitle());
        // 正文
        message.setText(mailDTO.getContent());
        try {
            mailSender.send(message);
            logger.info("邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送简单邮件时发生异常!", e);
        }
    }
}

测试:


@SpringBootTest
class MailApplicationTests {


    @Autowired
    private MailService mailService;
    @Test
    void contextLoads() {
        MailDTO mailDTO = new MailDTO();
        mailDTO.setContent("发送邮箱测试============");
        mailDTO.setMail("sovzn@qq.com");
        mailDTO.setTitle("测试");
        mailService.send(mailDTO);
    }
}

成功接收邮件: img点击并拖拽以移动