文章目录

  • 二十一.发送简单邮件
  • 二十二.发送多部件邮件



二十一.发送简单邮件

springboot整合第三方技术第三部分我们来说说邮件系统,发邮件是java程序的基本操作,springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作,再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化的多码?其实不多,差别不大,只是还个格式而已。

学习邮件发送之前先了解3个概念,这些概念规范了邮件操作过程中的标准。

SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议
POP3(Post Office Protocol - Version 3):用于接收电子邮件的标准协议
IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议
简单说就是SMPT是发邮件的标准,POP3是收邮件的标准,IMAP是对POP3的升级。我们制作程序中操作邮件,通常是发邮件,所以SMTP是使用的重点,收邮件大部分都是通过邮件客户端完成,所以开发收邮件的代码极少。除非你要读取邮件内容,然后解析,做邮件功能的统一处理。例如HR的邮箱收到求职者的简历,可以读取后统一处理。但是为什么不制作独立的投递简历的系统呢?所以说,好奇怪的需求,因为要想收邮件就要规范发邮件的人的书写格式,这个未免有点强人所难,并且极易收到外部攻击,你不可能使用白名单来收邮件。如果能使用白名单来收邮件然后解析邮件,还不如开发个系统给白名单中的人专用呢,更安全,总之就是鸡肋了。下面就开始学习springboot如何整合javamail发送邮件。

步骤①:导入springboot整合javamail的starter

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

步骤②:配置邮箱的登录信息

spring:
  mail:
    host: smtp.qq.com
    username: "填写qq邮箱"
    password: "填写授权码"

va程序仅用于发送邮件,邮件的功能还是邮件供应商提供的,所以这里是用别人的邮件服务,要配置对应信息。

host配置的是提供邮件服务的主机协议,当前程序仅用于发送邮件,因此配置的是smtp的协议。

password并不是邮箱账号的登录密码,是邮件供应商提供的一个加密后的密码。

Springboot 发送邮件 springboot邮件发送功能 java_发送邮件

用电话号发送短信

Springboot 发送邮件 springboot邮件发送功能 java_spring boot_02

接到授权码

Springboot 发送邮件 springboot邮件发送功能 java_spring_03

步骤③:使用JavaMailSender接口发送邮件

@Service
public class SendMailServiceImpl implements SendMailService {
    @Resource
    private JavaMailSender javaMailSender;

    //发送人
    private String from = "test@qq.com";
    //接收人
    private String to = "test1@qq.com";
    //标题
    private String subject = "测试邮件";
    //正文
    private String context = "测试邮件正文内容";

    @Override
    public void sendMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from+"(qgc)");
        message.setTo(to);
        message.setSubject(subject);
        message.setText(context);
        javaMailSender.send(message);
    }
}

将发送邮件的必要信息(发件人、收件人、标题、正文)封装到SimpleMailMessage对象中,可以根据规则设置发送人昵称等。

二十二.发送多部件邮件

发送简单邮件仅需要提供对应的4个基本信息就可以了,如果想发送复杂的邮件,需要更换邮件对象。使用MimeMessage可以发送特殊的邮件。

发送网页正文邮件

@Service
public class SendMailServiceImpl2 implements SendMailService {
    @Resource
    private JavaMailSender javaMailSender;

    //发送人
    private String from = "test@qq.com";
    //接收人
    private String to = "test@qq.com";
    //标题
    private String subject = "测试邮件";
    //正文
    private String context = "<a href='https://www.yuque.com/qgc226'>语雀访问地址</a>”

    public void sendMail() {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message);
            helper.setFrom(to+"(qgc)");
            helper.setTo(from);
            helper.setSubject(subject);
            helper.setText(context,true);		//此处设置正文支持html解析,设置true

            javaMailSender.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

发送带有附件的邮件

@Service
public class SendMailServiceImpl2 implements SendMailService {
    @Resource
    private JavaMailSender javaMailSender;

     //发送人
    private String from = "test@qq.com";
    //接收人
    private String to = "test@qq.com";
    //标题
    private String subject = "测试邮件";
    //正文
    private String context = "<a href='https://www.yuque.com/qgc226'>语雀访问地址</a>”

    @Override
    public void sendMail() {
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            //MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);//发送附近,设置参数为true
            helper.setFrom(from + "(qgc)");
            //helper.setTo(to);
            //设置多个接收人
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(context, true); //此处设置正文支持html解析
            //添加附件
            File f1 = new File("D:\\ideaProjects\\springboot-demo\\springboot-email\\target");

            helper.addAttachment(f1.getName(), f1);

            javaMailSender.send(mimeMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

测试类执行

@SpringBootTest
class SpringbootEmailApplicationTests {
    @Autowired
    private SendMailService sendMailService;

    @Test
    void contextLoads() {
        sendMailService.sendMail();
    }

}

总结

  1. springboot整合javamail就是简化了发送邮件的客户端对象JavaMailSender的初始化过程,通过配置的形式加载信息简化开发过程