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);
}