深入浅出 SpringBoot 2.x _ 10. SpringBoot 集成 JavaMail 发送邮件

一、SMTP、IMAP、POP3

什么是SMTP?

SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
什么是IMAP?

IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
什么是POP3?

POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。

举例来解释一下:

xxx@163.com 发一个邮件给 xxx@qq.com

xxx@163.com 用户要发送邮件,首先 xxx@163.com 这个用户将邮件投递到 163 的 SMTP 服务器,在这个过程中,就使用了 SMTP 这个协议;接着,163 的 SMTP 服务器再将邮件投递到腾讯的SMTP服务器,这个过程也用了 SMTP 协议。

然后再来说 POP3 协议

当这个邮件到达 腾讯 服务器之后,xxx@qq.com 这个用户需要登录服务器查看邮件,这个时候,这个 POP3 协议就被用上了。邮件服务器商都会为每一个用户专门提供邮件存储空间,SMTP 服务器收到邮件之后,就会存到对应用户的邮件存储空间中,如果用户现在要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。

二、准备工作(以 163 邮箱为例)

首先打开 163 邮箱(没有的话自己去注册一个~),登录后,在最上方可以找到一个设置,设置里面有一个 POP3/IMAP/SMTP 的设置。

深入浅出 SpringBoot 2.x _ 10. SpringBoot 集成 JavaMail 发送邮件

然后把服务开了

深入浅出 SpringBoot 2.x _ 10. SpringBoot 集成 JavaMail 发送邮件

它会让你设置一个授权码,这个要自己保存一下,别弄丢了。。

然后打开我们的项目,在 pom 文件中加入 SpringBoot-mail 的依赖

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

最后一个准备工作,打开 yml 配置文件

深入浅出 SpringBoot 2.x _ 10. SpringBoot 集成 JavaMail 发送邮件

自己配置一下这个东西,接下来开始学习如何发送邮件~

三、SpringBoot 发送文本邮件

我们在 Test 类中引入一个对象:JavaMailSender,他是最后用来发送邮件的时候用到的类。

开始写代码~~~

@Test
	public void commonEmail() {
		//创建简单邮件消息
		SimpleMailMessage message = new SimpleMailMessage();
		//谁发的
		message.setFrom("185....06@163.com");
		//谁要接收
		message.setTo("....@qq.com");
		//邮件标题
		message.setSubject("大风歌");
		//邮件内容
		message.setText("大风起兮云飞扬,威加海内兮归故乡。安得猛士兮守四方!");
		try {
			mailSender.send(message);
			System.out.println("发送成功");
		} catch (MailException e) {
			e.printStackTrace();
		}
	}

写好之后我们来测试一下。

深入浅出 SpringBoot 2.x _ 10. SpringBoot 集成 JavaMail 发送邮件

可以看到哈,是没有问题的。

四、SpringBoot 发送 HTML 格式的文件

有的时候直接发送文本可能觉得太丑了,我们也可以发送 HTML 到对方邮箱,来看一下代码

@Test
	public void htmlEmail() throws MessagingException, MessagingException {
		//创建一个MINE消息
		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper minehelper = new MimeMessageHelper(message, true);
		//谁发的
		minehelper.setFrom("185.....@163.com");
		//谁要接收
		minehelper.setTo("xxx....@qq.com");
		//邮件标题
		minehelper.setSubject("大风歌");
		//邮件内容
		String content = "<html>\n" +
				"<body>\n" +
				"    <h1>大风起兮云飞扬,威加海内兮归故乡。安得猛士兮守四方!</h1>\n" +
				"</body>\n" +
				"</html>";
		//邮件内容   true 表示带有附件或html
		minehelper.setText(content, true);
		try {
			mailSender.send(message);
		} catch (MailException e) {
			e.printStackTrace();
		}
	}

然后我们再来进行发送~~~

深入浅出 SpringBoot 2.x _ 10. SpringBoot 集成 JavaMail 发送邮件

可以看到哈,和上面的纯文本的还是有很大的差别的~

五、!!!一定要看

我们在将这个邮件功能集成到我们项目之后,不要直接同步进行调用发送,这样可能会导致超时!!!

最好的方式是单独开一个线程进行发送操作,这样可以避免很多麻烦

 

这一篇东西不多,自己练习一下

有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人自愿网站:https://www.lemon1234.com

最近网站在改造中,欢迎各位提出意见。

上一篇:邮件服务器搭建


下一篇:hdu 2845(dp基础题)