前言
邮件类型 | 特点 | |
---|---|---|
简单邮件 | 不能解析html语言,发送的为原本文本,不能加附件发送 | |
复杂邮件 | 可以选择是否解析html语言,能加附件发送 |
依赖
邮件配置的
手机短信的
目录
发送邮件
申请邮件授权码(这里是qq的)
applicaton配置
1.qq邮箱的配置
2.163邮箱的配置
其它邮箱的配置只要改对应的host那些就行
简单邮件发送
@Autowired
JavaMailSenderImpl MailSender;
@Test
void contextLoads() {
//建简单邮件对象
SimpleMailMessage MailMessage = new SimpleMailMessage();
//邮件设置
MailMessage.setSubject("我是邮件标题-来了"); //标题
MailMessage.setText("我是邮件内容-来了"); //邮件内容
MailMessage.setTo("接受者qq@qq.com"); //发给谁
MailMessage.setFrom("发送者qq@qq.com");//谁发的
MailSender.send(MailMessage);
}
复杂邮件发送
1.这部分用的是模板可看发送邮件自定义模板
@Autowired
JavaMailSenderImpl MailSender;
//thymeleaf解析器
@Autowired
private TemplateEngine templateEngine;
@Test
void SendMail() throws MessagingException {
//是可自定义对象
Message message =new Message("ai",11);
//创建邮件正文
Context context = new Context();
//设置邮件模板内可变参数(message是一个对象)
context.setVariable("message", message);
//替换字符串
String content = "http";
String replace = content.replace("http","https://xxx/1.png");
//放入context
context.setVariable("image", replace);
context.setVariable("sendTime", new Date());
//用于解析模板并利用当前response对象的writer把模板输出到浏览器(返回值是html文件包括变量的)
//用带参数的context改变a.html(用thymeleaf语法)返回的是改变了的html
String emailContent = templateEngine.process("a", context);
2.用MailSender.createMimeMessage(),创建复杂邮件对象–与简单邮件不同处
//建复杂邮件对象
MimeMessage mimeMessage =MailSender.createMimeMessage();
//true表示需要创建一个multipart message
MimeMessageHelper helpr=new MimeMessageHelper(mimeMessage,true);
//邮件设置
helpr.setSubject("我是邮件标题-来了");
3.这里可以选是否解析html代码
helpr.setText(emailContent,true); //设置其为会解析html
helpr.setTo("接受者qq@qq.com"); //发给谁
helpr.setFrom("发送者qq@qq.com");//谁发的
//上传文件
helpr.addAttachment("1.png",new File("C:\\Users\\12113\\Desktop\\1.png"));
MailSender.send(mimeMessage);
}
发送邮件自定义模板
1.先用thymeleaf的Context容器放入参数
@Autowired
JavaMailSenderImpl MailSender;
//thymeleaf解析器
@Autowired
private TemplateEngine templateEngine;
@Test
void SendMail() throws MessagingException {
//是可自定义对象
Message message =new Message("ai",11);
//创建邮件正文
Context context = new Context();
//设置邮件模板内可变参数(message是一个对象)
context.setVariable("message", message);
//替换字符串
String content = "http";
String replace = content.replace("http","https://xxx/6.png");
//放入context
context.setVariable("image", replace);
context.setVariable("sendTime", new Date());
1.在将Context放入TemplateEngine引擎里,这里的返回值是接收了参数的a.html的字符串
//用于解析模板并利用当前response对象的writer把模板输出到浏览器(返回值是html文件包括变量的)
//用带参数的context改变a.html(用thymeleaf语法)返回的是改变了的html
String emailContent = templateEngine.process("a", context);
注意:这里要个a.html在templates有才能访问到
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h>你好,[[${message.name}]],您今年[[${message.age}]]</h>
<img class="avatar1" width="80" height="80" th:src="@{${image}}" >
现在时间:<th th:text="${sendTime}"></th>
</body>
</html>
使用模板的注意事项
1.在类里自动注入TemplateEngine,这个类也应是自动注入的(如下)
这个是config层的
这个是controller层的
手机验证码
初始化
1.先去阿里云申请(要登入),点这里跳转
2.点击
3.创建并记下AccesKey ID和AccessKeySecret
4.在XX管理那里,添加签名和添加模板,记住签名与模板名称
配置
1.需要用到的application.yml有这4个
#手机短信相关配置
sms:
accessKeyId: LTAI4Fku38EbzFCDdL9Sy6RD
accessKeySecret: XXXXXXXXXXXXXXXX
signName: X博客 # 签名名称
verifyCodeTemplate: SMS_183195163 # 模板名称
设置http超时与id和Secret
1.System.setProperty的这两个参数在第一次连接时设置,并且会被缓存,在程序不关的情况下,再次访问,还是以第一次的结果为准
//产品名称:云通信短信API产品,开发者无需替换
static final String product = "Dysmsapi";
//产品域名,开发者无需替换
static final String domain = "dysmsapi.aliyuncs.com";
@Test
void sms()throws ClientException{
//可自助调整超时时间-设置http的超时
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
//keyId和keySecret
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
"你自己的AccessKeyId", "你自己的AccessKeySecret");
固定部分
//product = "Dysmsapi",domain = "dysmsapi.aliyuncs.com"
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
//放入IClientProfile
IAcsClient acsClient = new DefaultAcsClient(profile);
填发送对象手机号短信签名与短信模板
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
request.setMethod(MethodType.POST);
//必填:待发送手机号
request.setPhoneNumbers("发送对象手机号");
//必填:短信签名-在application
request.setSignName("自己的短信签名");
//必填:短信模板-在application
request.setTemplateCode("自己的短信模板");
用json形的字符串改短信模板中的参数
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为:${code}"时,此处的值为
//这里的模板是{"code":"2333"} 是json写法会加载到自定义里的${code}
//亲爱的${name},您的验证码为2333
//todo :手机模板写法
request.setTemplateParam("{\"code\":\"" + "2333" + "\"}");
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("123456");
//hint 此处可能会抛出异常,注意catch(成功返回值可取sendSmsResponse.getCode()短信状态,sendSmsResponse.getMessage()短信消息)
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
}