• 【开发篇】十六、SpringBoot整合JavaMail实现发邮件


    0、相关协议

    • SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议
    • POP3(Post Office Protocol - Version 3):用于接收电子邮件的标准协议
    • IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议

    1、SpringBoot整合JavaMail

    STEP1:加入JavaMail起步依赖

    <dependency>    
    	<groupId>org.springframework.bootgroupId>    
    	<artifactId>spring-boot-starter-mailartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    STEP2:相关配置:

    spring:  
      mail:    
        host: smtp.qq.com  # 发邮件,smtp协议,后面.运营商    
        username: *********@qq.com    
        password: *********  # 不是邮箱的密码,是下面获取的一个授权码
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意password,不是邮箱的登录密码,是一个授权码,获取方式,在QQ邮箱中是【设置】-【邮箱账号】-【开启】

    在这里插入图片描述

    发送验证短信:

    在这里插入图片描述

    然后在上个页面点保存更改,(记得点保存更改)复制这个授权码就是password的值,即可配置邮件客户端成功。

    在这里插入图片描述
    其他类型的邮箱获取方式类似,比如163:

    在这里插入图片描述

    STEP3:注入JavaMailSender对象,定义发送邮件的接口

    @Autowired    
    private JavaMailSender javaMailSender;   
    
    • 1
    • 2

    整合完成,下面按简单邮件和复杂邮件来写。简单即普通文本,复杂即超链接、附件等。

    2、发送简单邮件

    以下用QQ邮箱给163邮箱发一个简单文本的邮件:

    //定义接口
    public interface SendMailService{
    
    	void sendMail();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    //实现类
    
    @Service
    public class SendMailServiceImpl implements SendMailService { 
    
    	@Autowired    
    	private JavaMailSender javaMailSender;   
    
    	//这些值也可以不硬编码,写在配置文件中@Value取值
    	private String from = "********@qq.com";	 // 发送人    
    	private String to = "********@126.com";	 // 接收人   
    	private String subject = "测试邮件";		 // 邮件主题   
    	private String text = "测试邮件正文";	 	// 邮件内容
    		    
    	@Override    
    	public void sendMail() {       
    		SimpleMailMessage mailMessage = new SimpleMailMessage();  
    		//mailMessage.setFrom(from); 
    		//from后面加个名字,比如xxx公司,不然发送发一串邮箱数字,谁知道你是谁      
    		mailMessage.setFrom(from + "别名");   
    		//这里的to是个可变长String,即可发送多人
    		mailMessage.setTo(to);        
    		mailMessage.setSubject(subject);        
    		mailMessage.setText(text);
    		//mailMessage.setSendDate();        //设置发送的时间
    		//其他设置自行set
    		javaMailSender.send(mailMessage);     //发送
    	}
    	
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    写个测试类看下效果:

    在这里插入图片描述
    联不通:

    在这里插入图片描述

    我在公司内网写的,网络不通,不是25端口被禁的原因,在外网是可以ping通smtp.qq.com这个host的。先跳过了。

    3、发送复杂邮件

    正文为html,比如超链接或者图片。以及发送附件:

    //超链接
    private String text = "百度";
    
    //图片
    private String img = "";
    
    @Override
    public void sendMail() {    
    	try {        
    		MimeMessage mimeMessage = javaMailSender.createMimeMessage(); 
    		//第二个参数,即是否允许添加多部件
    		//我后面要添加各种附件,所以这里必须是true       
    		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);       
    		mimeMessageHelper.setFrom(from);       
    		mimeMessageHelper.setTo(to);        
    		mimeMessageHelper.setSubject(subject);
    		//不加true,默认当普通文本,true即按html来解析        
    		mimeMessageHelper.setText(text,true);  
    		
    		//添加附件
    		File file1 = new File("logo.png"); 
    		File file2 = new File("D:\\myboot.jar"); 
    		//如果是手写文件名,记得添加个后缀,比如.png,方便在邮件里可预览 
    		mimeMessageHelper.addAttachment(file1.getName(),file1);  
    		mimeMessageHelper.addAttachment("一个jar包.jar",file2);    
    		javaMailSender.send(mimeMessage);    
    	} catch (Exception e) {       
    		e.printStackTrace();   
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    注意点:

    • 不再用简单消息对象,而是MimeMessage对象,并把它包装成mimeMessageHelper对象
    • 要传附件的话,mimeMessageHelper对象构造方法的第二个参数传true
    • setText方法重载,第二个参数传true,就是讲text按照html来解析,而不是普通文本
    • 注意最后send的还是MimeMessage对象,不是mimeMessageHelper对象
  • 相关阅读:
    数据链路层-概述
    【prometheus+grafana】快速入门搭建-服务监控各插件及企业微信告警
    Java之图书管理系统
    8.1 Windows驱动开发:内核文件读写系列函数
    网关Gateway-快速上手
    Dapr 的 gRPC组件(又叫可插拔组件)的提案
    【Android笔记56】Android之内容观察者Content Observer介绍及其使用
    变量的引用
    数据结构实战开发教程(八)选择排序和插入排序、冒泡排序和希尔排序、归并排序和快速排序、排序的工程应用示例
    Mac电脑安装Zulu Open JDK 8 使用 spring-kafka 消费不到Kafka Partition中的消息
  • 原文地址:https://blog.csdn.net/llg___/article/details/133593862