用SpringBoot轻松实现通过QQ邮箱发送电子邮件

我不考虑将来。要是我既要想着今天,又要操心明天,生活就没意思了。 每当事情遭到不能再糟的地步时,我总发现天无绝人之路。

前言

关于如何搭建SpringBoot工程以及开启Web功能,
可以查看我的这篇博客:用Spring Initializr快速构建SpringBoot及整合MVC

环境准备

首先,我们需要打开QQ邮箱,进入设置,选中账户,开启SMTP服务,如图:
在这里插入图片描述
并生成授权码,授权码的作用相当于QQ邮箱的密码。

所需依赖

在依赖管理文件pom.xml中导入发送邮件所需要的起步依赖:

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

配置文件

在配置文件application.yml中配置发送邮箱方的相关信息:

spring:
	 # 配置QQ邮箱
  mail:
    #默认发送邮件基于smtp协议 可不要
    protocol: smtp
    #smtp服务器地址
    host: smtp.qq.com
    #发送方的邮箱
    username: ******@qq.com
    #发送方的密码(授权码或者QQ邮箱密码都可以)
    password: ********
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

代码实现

首先需要一个邮件实体类:

package com.guqueyue.entity;

/**
 * @author guqueyue
 * @Date 2020/5/26
 **/
@Data //lombok插件的注解,若是没有用lombok插件,请自行生成getter、setter方法
@AllArgsConstructor //全参构造方法
@NoArgsConstructor //无参构造方法
@Accessors(chain = true) //开启链式编程
public class Email implements Serializable {

    /**
     * 接收者
     */
    private String to;

    /**
     * 邮件标题
     */
    private String subject;

    /**
     * 发送内容
     */
    private String context;

    /**
     * 发送时间
     */
    private Date sendTime;
}

其次在Web层新建一个Controller,代码如下:

package com.guqueyue.controller;

/**
 * @author guqueyue
 * @Date 2020/5/26
 * 发送邮件
 **/
@Controller
@RequestMapping("/send")
public class MailController {

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 获取配置文件里的发送方
     */
    @Value("${spring.mail.username}")
    private String from;

    @RequestMapping("/mail")
    public void sendMail() throws MessagingException {
        // 设置邮件内容
        Email email = new Email()
                .setSubject("这是一封测试邮件")
                .setContext("<hr/>盖西伯(周文王)拘而演《周易》;<br/> 仲尼厄而作《春秋》;<br/>屈原放逐,乃赋《离骚》;<br/>" +
                        "左丘失明,厥有《国语》;<br/>孙子膑脚,《兵法》修列;<br/>" +
                        "不韦迁蜀,世传《吕览》;<br/>韩非囚秦,《说难》、《孤愤》;《诗》三百篇大抵圣贤发愤之所作也。<hr/>")
                .setTo(from)
                .setSendTime(new Date());

        // 发送邮件
        send(email);
    }

    /**
     * 发送邮件的方法
     */
    public void send(Email email) throws MessagingException {
        System.out.println("接收到的邮件对象为:" + email);

        //创建一封邮件
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();


        //Spring提供的一个便捷的邮件设置对象
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);


        //设置邮件的内容
        //标题
        mimeMessageHelper.setSubject(email.getSubject());


        //发送方
        mimeMessageHelper.setFrom(from);


        //接收方
        mimeMessageHelper.setTo(email.getTo());//接收者
//        mimeMessageHelper.setCc("***@qq.com");//抄送
//        mimeMessageHelper.setBcc("***@qq.com");//密送


        //设置内容
        mimeMessageHelper.setText(email.getContext(), true);


        //发送附件
//        mimeMessageHelper.addAttachment("我的附件.jpg", new File("C:\\worker\\images\\7f25dc3b-13e5-42a5-a205-8276b0528040"));


        //设置当前时间
        mimeMessageHelper.setSentDate(email.getSendTime());


        //发送邮件
        javaMailSender.send(mimeMessage);
        System.out.println("成功发送邮件......");
    }
}

然后运行程序,在浏览器输入http://localhost:8080/send/mail,不必理会页面的404错误,发现邮箱收到以下邮件即为成功:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Qizhi_Hu/article/details/106359376