本文将介绍spring boot邮件发送
将介绍以下几个方面:
- 邮件使用场景
- 邮件发送原理
- 邮件发送流程
- 邮件发送步骤
1. 邮件发送使用场景:
- 注册验证 注册各种账户
- 网站营销 给邮件发送邮件广告
- 身份安全验证 验证你的身份修改密码
- 提醒 监控告警
- 工作邮件
2. 邮件发送原理:
- 邮件传输协议: SMTP协议和POP3协议
SMTP协议:
简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输email的事实标准。
SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
POP3协议
POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。
后来又出现了:
- IMAP协议(对Pop3协议的补充)和Mime协议
3. 邮件发送流程:
4. 邮件发送实战步骤:
- 第一步首先是创建一个简单的spring boot项目,你可以到官网spring boot去生成一个简单的项目,然后用IDEA开发工具导入,也可以直接在IDEA中新建一个spring boot项目.
这里以QQ邮箱为例子进行简单的邮件发送:
- 在pom.xml中引入依赖:
org.springframework.boot
spring-boot-starter-mail
- 在application.yml中配置邮箱参数:
spring:
mail:
host: smtp.qq.com
username: [email protected] #发送方的邮箱
password: xxxxxxxxxx # 设置密码,该处的密码是发送方QQ邮箱开启SMTP的授权码而非QQ密码
那么如何开启QQ邮箱的授权码呢?
-
打开QQ邮箱,设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务-->打开下图我标出的服务:
- 创建一个类SendEmailService :
@Service
public class SendEmailService {
@Autowired
JavaMailSender jms;
public String send(String sender,String receiver,String title,String text){
//建立邮件消息
SimpleMailMessage mainMessage = new SimpleMailMessage();
//发送方
mainMessage.setFrom(sender);
//接收方
mainMessage.setTo(receiver);
//发送的标题
mainMessage.setSubject(title);
//发送的内容
mainMessage.setText(text);
jms.send(mainMessage);
return "success";
}
}
然后创建一个controller:
@RestController
public class mail {
@Autowired
private SendEmailService sendEmailService;
@GetMapping("/send")
public String send(){
String sender="[email protected]"; //这个是发送人的邮箱
String receiver="[email protected]"; //这个是接受人的邮箱
String title="66万漏油奔驰"; //标题
String text="【坐在引擎盖上哭】“ 66万买辆奔驰,还没开出店门就漏油,请问这种车去哪里买呢,我也想要一辆。";
String result=sendEmailService.send(sender, receiver, title, text);
return result;
}
}
这样,一个简单的邮件发送步骤就结束了,现在启动项目服务,运行代码,检测是否成功!
成功截图:
可以看出,已经成功了,是不是很简单!
发送html模板邮件:
同样,我们在刚才的SendEmailService下再写一个发送html的方法:
public String sendHtml(String sender,String receiver,String subject, String content) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
//发送方
helper.setFrom(sender);
//接收方
helper.setTo(receiver);
//邮件主题
helper.setSubject(subject);
//邮件内容
helper.setText(content,true);
jms.send(message);
return "sendHtml success";
}
然后在刚才的controller中进行测试:
/**
* HTML邮件发送
* @return
*/
@RequestMapping("/htmlEmail")
public String sendHtml() throws MessagingException {
String content = "\n"+
"\n"+
"这是一封有历史意义的HTML邮件,请注意查收!!!
\n"+
"\n"+
"";
String html = sendEmailService.sendHtml(sender,receiver,title,content);
return html;
}
开启tomcat服务,输入http://localhost:8080/htmlEmail,结果为:
邮件弹出的通知:
邮件内容:
含有附件的邮件发送:
同样,我们在刚才的SendEmailService下再写一个发送含有附件邮件的方法:
/**
* 发送含有附件的邮件
* @param sender
* @param receiver
* @param subject
* @param content
* @param filePath
* @return
* @throws MessagingException
*/
public String sendAttachment(String sender,String receiver,String subject, String content, String filePath) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
//发送方
helper.setFrom(sender);
//接收方
helper.setTo(receiver);
//邮件主题
helper.setSubject(subject);
//邮件内容
helper.setText(content,true);
//邮件的附件
FileSystemResource file = new FileSystemResource(new File(filePath));
//获取附件的文件名
String fileName = file.getFilename();
helper.addAttachment(fileName,file);
jms.send(message);
return "sendAttachment success";
}
然后在刚才的controller中进行测试:
/**
* 含有附件的邮件发送
* @return
* @throws MessagingException
*/
@RequestMapping("/attachment")
public String sendAttachment() throws MessagingException {
String filePath = "E:\\IDEA使用方法\\yml知识.txt";
String content = "我的这封邮件可是很厉害的,因为它可以带附件呦!!!";
String attachment = sendEmailService.sendAttachment(sender,receiver,title,content,filePath);
return attachment;
}
结果:
邮件内容:
含有图片的邮件发送:
同样,我们在刚才的SendEmailService下再写一个发送含有图片邮件的方法:
/**
* 含有图片的邮件
* @param sender
* @param receiver
* @param subject
* @param content
* @param picPath
* @param picId
* @return
* @throws MessagingException
*/
public String sendPicture(String sender,String receiver,String subject, String content,
String picPath,String picId) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
//发送方
helper.setFrom(sender);
//接收方
helper.setTo(receiver);
//邮件主题
helper.setSubject(subject);
//邮件内容
helper.setText(content,true);
//邮件的图片
FileSystemResource file = new FileSystemResource(new File(picPath));
helper.addInline(picId,file);
jms.send(message);
return "sendPicture success";
}
然后在刚才的controller中进行测试:
/**
* 含有图片的邮件
* @return
* @throws MessagingException
*/
@RequestMapping("/picture")
public String sendPicture() throws MessagingException {
String picPath = "C:\\Users\\asus\\Downloads\\壁纸\\全军.jpg";
String picId = "PIC001";
String content = "我的这封邮件可是很厉害的,因为它可以显示图片呦!!!\n" +
"";
String picture = sendEmailService.sendPicture(sender,receiver,title,content,picPath,picId);
return picture;
}
成功:
邮件内容:
怎么样,喜欢的话,麻烦帅哥们点个赞可以吗?