一、前言
最近将项目的登录密码从图形验证码改为了短信验证码,同时也将忘记密码时长度进行了修改,在修改时,想到了之前在一些国外的网站上,使用过邮箱接收验证码的情况,故想到何妨不自己尝试整合一下Java程序发送邮件信息呢,所以动手整合了Email的发送实例。
二、Email发送协议
想要在互联网上提供电子邮件功能,必须要有专门的电子邮件服务器来进行邮件的收发,互联网用户日常都是使用对外免费使用的电子邮件服务器,例如163,新浪,qq邮箱等等。他们主要使用的是两种协议来实现接收用户投递的邮件,并把邮件发送给指定的接收人,传输协议主要有两种
2.1 SMTP协议
用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
2.2 POP3协议
同样,用户若想从邮件服务器管理的电子邮箱当中接收一封电子邮件话,它连上邮件服务器后,也要遵循一定的通讯格式,POP3协议就是用来定义这种通讯格式的。因此,我们通常也把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
三、整合邮件发送
通过简单介绍,想要进行邮件的发送,使用SMTP协议发送给邮件服务器,即可完成邮件的发送。Java 提供了javax.mail包,开发者可使用此包完成邮件的发送,Spring同样将javax.mail包整合到了spring-boot-starter-mail包中,开发者可通过maven依赖,更简单的完成邮件的发送配置及内容发送的开发,此次使用SpringBooot整合email工具。
整合框架:SpringBoot
所用邮箱:163邮箱
3.1 引入POM文件依赖
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
|
3.2 全局配置文件(application.properties)增加email配置
授权码为邮箱设置中心的客户端授权码,不是自己的登录密码,一定要确认
1 2 3 4 5 6 7 8 9 10 11 12
| #服务器端口 server.port=8088 #指定server绑定的地址 server.address=0.0.0.0 #应用上下文 server.context-path=/emailSv #邮箱的SMTP服务器 spring.mail.host=smtp.163.com #密码是邮箱设置的授权密码.不是邮箱的登录密码 spring.mail.password=xxxxxx #这个是你的邮箱 spring.mail.username=xxxxx@163.com
|
3.3 编写发送代码
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| package com.yang.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.web.bind.annotation.*;
import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.File;
@RestController @RequestMapping("/sendEmail") public class SendEmailController { @Autowired private JavaMailSender mailSender;
@RequestMapping(value = "/send", method = RequestMethod.GET) public String send(@RequestParam("content") String content) { try { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom("xxx@163.com"); helper.setSubject("Java程序发送邮件"); helper.setText(content); InternetAddress[] internetAddressTo = new InternetAddress().parse("xxx@qq.com,1234@163.com"); mimeMessage.setRecipients(MimeMessage.RecipientType.TO,internetAddressTo); InternetAddress[] internetAddressCC = new InternetAddress().parse("xxxsss@126.com,sassa@163.com"); mimeMessage.setRecipients(MimeMessage.RecipientType.CC,internetAddressCC); mimeMessage.saveChanges(); mailSender.send(mimeMessage); return "发送成功"; }catch (Exception e){ e.printStackTrace(); return "发送失败"; } }
@RequestMapping("/sendFile") public String sendFile() throws MessagingException{ MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom("xxx@163.com"); helper.setTo("xxx@qq.com"); helper.setSubject("主题:发送附件邮件"); helper.setText("请查看附件。"); FileSystemResource file1 = new FileSystemResource(new File("d:\\a.txt")); FileSystemResource file2 = new FileSystemResource(new File("d:\\b.txt")); helper.addAttachment("省份SQL.txt", file1); helper.addAttachment("市级SQL.txt", file2); try { mailSender.send(mimeMessage); return "带附件的邮件已发送。"; } catch (Exception e) { return "带附件的邮件发送失败。"; } } }
|
3.4 接口响应结果
3.5 邮箱接收结果
3.5 下载地址
点我下载