依赖
<!-- javax.mail-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
yml配置
spring:
mail:
username: 你的@qq.com
password: 邮箱授权码
host: smtp.qq.com
# 开启加密验证
properties: {mail.smtp.ssl.enable:'true'}
简单的邮件
@Test
void contextLoads(){
// 一个简单的邮件
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setSubject("荣哥你好");
mailMessage.setText("上课上累了");
mailMessage.setTo("806451906@qq.com");
mailMessage.setFrom("806451906@qq.com");
javaMailSender.send(mailMessage);
}
封装工具类(复杂得邮件)
@Autowired
private JavaMailSenderImpl javaMailSender;
/**
*
* @param multipart 是否支持多文件
* @param subject 标题
* @param text 内容
* @param file 文件
* @param setTo 接收者
* @throws MessagingException
*/
public void sendMail(boolean multipart,String subject,String text,File file,String setTo) throws MessagingException {
// 一个复杂的邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,multipart,"utf-8");
// 正文
helper.setSubject(subject);
// true:支持html格式
helper.setText(text,true);
//附件
helper.addAttachment("头像",new File("C:\\Users\\admin\\Desktop\\1.jpg"));
helper.addAttachment("头像",file);
helper.setFrom("806451906@qq.com");
helper.setTo(setTo);
javaMailSender.send(mimeMessage);
}
以上是在springboot的测试类中可以用,如果在项目中工具类没办法被spring识别,所以yml中配置的邮件属性就不生效了,报空指针错误,以下是web项目中的工具类
package com.ahead.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Random;
/**
工具类
*/
public class yanZhengUtil {
/**
注意:由于工具类无需创建对象,所以把其构造器私有化会显得很专业!
*/
private yanZhengUtil(){
}
// 配置邮箱属性
public static JavaMailSenderImpl JavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.qq.com");
mailSender.setUsername("806451906@qq.com");
mailSender.setPassword("xihdtjycwejcbebg");
return mailSender;
}
/**
静态方法生成验证码。
*/
public static String createVerifyCode(int n){
// 开发一个验证码:
// 1、定义一个变量记住验证码。
String code = "";
// 2、定义一个变量记住全部验证码字符。
String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 3、定义一个循环生成几个随机索引,去得到几个字符
Random r = new Random();
for (int i = 0; i < n; i++) {
// 4、获取随机索引对应的字符。链接给code
int index = r.nextInt(data.length());
code += data.charAt(index);
}
return code;
}
public static void sendMail(String subject,String code, String setTo) throws MessagingException {
JavaMailSenderImpl javaMailSender = JavaMailSender();
System.out.println("code="+code);
System.out.println("setTo="+setTo);
// 一个简单的邮件
SimpleMailMessage mailMessage = new SimpleMailMessage();
// 正文
mailMessage.setSubject(subject);
// 内容
mailMessage.setText("您的验证码为:"+code+",请在120秒内验证登录");
mailMessage.setTo(setTo);
mailMessage.setFrom(javaMailSender.getUsername());
javaMailSender.send(mailMessage);
}
}
控制层中直接调用就行
// 调用邮箱发送工具类
yanZhengUtil.sendMail("邮箱登录验证码",verifyCode,email);