SpringBoot整合JavaMail实现发邮件的项目实践

 更新时间:2023年10月07日 15:18:41   作者:-代号9527  
本文主要介绍了SpringBoot整合JavaMail实现发邮件的项目实践,详细阐述了使用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.boot</groupId>    
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

STEP2: 相关配置:

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

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

发送验证短信:

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

其他类型的邮箱获取方式类似,比如163:

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

@Autowired    
private JavaMailSender javaMailSender;   

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

2、发送简单邮件

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

//定义接口
public interface SendMailService{
	void sendMail();
}
//实现类
@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);     //发送
	}
}

写个测试类看下效果:

联不通:

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

3、发送复杂邮件

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

//超链接
private String text = "<a href='https://www.baidu.com/'>百度</a>";
//图片
private String img = "<img src='https://pic35.photophoto.cn/20150511/0034034892281415_b.jpg' />";
@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();   
	}
}

注意点:

  • 不再用简单消息对象,而是MimeMessage对象,并把它包装成mimeMessageHelper对象
  • 要传附件的话,mimeMessageHelper对象构造方法的第二个参数传true
  • setText方法重载,第二个参数传true,就是讲text按照html来解析,而不是普通文本
  • 注意最后send的还是MimeMessage对象,不是mimeMessageHelper对象

到此这篇关于SpringBoot整合JavaMail实现发邮件的项目实践的文章就介绍到这了,更多相关SpringBoot JavaMail发邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC @RequestBody的使用解析

    SpringMVC @RequestBody的使用解析

    这篇文章主要介绍了SpringMVC @RequestBody的使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java按字节截取带有汉字的字符串的解法(推荐)

    java按字节截取带有汉字的字符串的解法(推荐)

    下面小编就为大家带来一篇java按字节截取带有汉字的字符串的解法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java常用类之日期相关类使用详解

    Java常用类之日期相关类使用详解

    这篇文章主要为大家介绍了Java中常用类的日期相关类的用法教程,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下
    2022-08-08
  • SpringBoot如何实现并发任务并返回结果

    SpringBoot如何实现并发任务并返回结果

    这篇文章主要介绍了SpringBoot如何实现并发任务并返回结果问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Spring中bean对象的装配方式、作用域及生命周期详解

    Spring中bean对象的装配方式、作用域及生命周期详解

    这篇文章主要介绍了Spring中bean对象的装配方式、作用域及生命周期详解,SprignBoot中 @Bean 完美的替换了了上面的这种在xml中配置的方法,使用以下方法就能让spring在需要自动创建Info对象时,自动调用这个方法,需要的朋友可以参考下
    2023-11-11
  • 彻底了解java中ReentrantLock和AQS的源码

    彻底了解java中ReentrantLock和AQS的源码

    这篇文章主要介绍了彻底了解java中ReentrantLock和AQS的源码,想了解锁机制的同学,一定要参考下
    2021-04-04
  • 基于Redis分布式锁Redisson及SpringBoot集成Redisson

    基于Redis分布式锁Redisson及SpringBoot集成Redisson

    这篇文章主要介绍了基于Redis分布式锁Redisson及SpringBoot集成Redisson,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小小伙伴可以参考一下
    2022-09-09
  • SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法

    SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http

    这篇文章主要介绍了SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 使用MyBatis从hive中读取数据

    使用MyBatis从hive中读取数据

    Hive是一个基于Hadoop的数据仓库工具,它可以方便地对大规模数据进行查询和分析,本文主要介绍了使用MyBatis从hive中读取数据,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • springboot 使用上下文获取bean

    springboot 使用上下文获取bean

    这篇文章主要介绍了springboot 使用上下文获取bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论