Spring发送邮件主要依赖于MailSender接口。此接口会把email发送给邮件服务器,由服务器进行邮件投递。
Spring有一个JavaMailSenderImpl,这是MailSender的一个实现,主要要使用javamail api来发送email。
mailsender的配置
配置mailsender主要是设置相关属性,要与邮箱提供商的配置相吻合。比较容易出错
ssl方式
public class EmailConfiguration {
private static final String USERNAME="test@******";
private static final String HOST="smtp.exmail.qq.com";
private static final int PORT=465;
private static final String PASSWORD="123aAA";
@Bean
public JavaMailSender mailSender(){
JavaMailSenderImpl mailSender=new JavaMailSenderImpl();
mailSender.setHost(HOST);//设置主机
mailSender.setPort(PORT);//设置端口
mailSender.setUsername(USERNAME);//设置用户名
mailSender.setPassword(PASSWORD);//设置密码
mailSender.setDefaultEncoding("UTF-8");//设置编码
Properties properties=new Properties();
properties.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");//配置ssl
mailSender.setJavaMailProperties(properties);
return mailSender;
}
}
非ssl方式
若不需要使用ssl方式的smtp协议,只需要修改相关端口,删除ssl的相关配置。
public class EmailConfiguration {
private static final String USERNAME="test@******";
private static final String HOST="smtp.exmail.qq.com";
private static final int PORT=25;
private static final String PASSWORD="123aAA";
@Bean
public JavaMailSender mailSender(){
JavaMailSenderImpl mailSender=new JavaMailSenderImpl();
mailSender.setHost(HOST);//设置主机
mailSender.setPort(PORT);//设置端口
mailSender.setUsername(USERNAME);//设置用户名
mailSender.setPassword(PASSWORD);//设置密码
mailSender.setDefaultEncoding("UTF-8");//设置编码
return mailSender;
}
}
发信
发信主要需要配置SimpleMailMessage的相关属性
public void getCode(String email) {
SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
Random random=new Random();
int number=random.nextInt(100000)+1;
String message="您的验证码为"+number;
//发信内容
simpleMailMessage.setFrom("test@***");
simpleMailMessage.setTo(email);
simpleMailMessage.setSubject("验证码");
simpleMailMessage.setText(message);
javaMailSender.send(simpleMailMessage);
}