业务场景
- 是不是服务器 down 了?
- 爬虫的 Dom 解析没有解析到内容?
- 用户注册
- 消息通知(代码异常通知等)
邮件服务器与传输协议
- 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
- SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。
- SMTP协议
- 通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
- POP3协议
- 通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
Java发送邮件
好了,基本原理和业务场景搞清楚了,下来以QQ邮箱作为案例(163等其他邮箱也是类似的),基于SSM框架的,SpringBoot同理,当然SSM框架都会配置了SpringBoot还不是手到擒来
开启SMTP服务
点击设置—— 账户
请记住这串编号,后面的配置会用到
导入依赖 关于spring的依赖自行删减
com.sun.mailjavax.mail1.6.1org.springframeworkspring-context4.3.22.RELEASEorg.springframeworkspring-context-support4.3.4.RELEASEorg.springframeworkspring-webmvc4.3.4.RELEASEorg.springframeworkspring-tx4.3.13.RELEASEjunitjunit4.12
工程目录结构
设置配置文件 mail.properties
在163邮箱中同上的申请配置,可能和QQ页面所在位置不一样,请自行查找(基本都是一样的)
#服务器主机名QQ邮箱 smtp.xx.com 根据自己邮箱的使用自行设置 163邮箱: smtp.163.com
mail.smtp.host=smtp.qq.com
#自己的邮箱
mail.smtp.username=********@qq.com
#密码/客户端授权码 这里的授权码就是刚才在邮箱中生成的
mail.smtp.password=********
#编码字符
mail.smtp.defaultEncoding=utf-8
#是否进行用户名密码校验
mail.smtp.auth=true
#设置超时时间
mail.smtp.timeout=20000
spring-.xml 有些内容自行删减 这是我copy过来的
本文转载自:https://www.gylmap.com
spring-core.xml
${mail.smtp.auth}${mail.smtp.timeout}
SendEmailController
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.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
/**
* @Description: 发送邮件
* @Author: 张楚涵
* @Date: 2022/8/14 0014 15:58
* @version:1.0.0
*/
@RestController
public class SenEmailController {
@Autowired
private JavaMailSender javaMailSender;//在spring中配置的邮件发送的bean
@RequestMapping(value = "/send",method = RequestMethod.GET,produces = "text/html; charset=utf-8")
public Object sendMail03(){
MimeMessage mMessage=javaMailSender.createMimeMessage();//创建邮件对象
MimeMessageHelper mMessageHelper;
Properties prop = new Properties();
String from;
try {
//从配置文件中拿到发件人邮箱地址
//根据自己的目录设置
prop.load(this.getClass().getClassLoader().getResourceAsStream("mail.properties"));
from = prop.get("mail.smtp.username")+"";
mMessageHelper=new MimeMessageHelper(mMessage,true);
// mMessageHelper.setFrom(from);//发件人邮箱
// 第二个参数是你想发送邮件时想用的名字
mMessageHelper.setFrom(new InternetAddress(from, "###", "UTF-8"));
mMessageHelper.setTo("*******@qq.com");//收件人邮箱
mMessageHelper.setSubject("******");//邮件的主题
mMessageHelper.setSubject("Spring的邮件发送");//邮件的主题
//邮件的文本内容,true表示文本以html格式打开
mMessageHelper.setText("这是使用spring的邮件功能发送的一封邮件
" +
"打开我的博客主页
" +
"",true);
/*
File file=new File("F:/img/mr.png");//在邮件中添加一张图片
FileSystemResource resource=new FileSystemResource(file);
mMessageHelper.addInline("fengye", resource);//这里指定一个id,在上面引用
mMessageHelper.addAttachment("mr.png", resource);//在邮件中添加一个附件
*/
javaMailSender.send(mMessage);//发送邮件
} catch (MessagingException e) {
e.printStackTrace();
return "发送失败";
} catch (IOException e) {
e.printStackTrace();
}
return "发送成功";
}
}
测试