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