学生能力提升平台注册邮件发送
在spring中使用邮件发送
由于项目部署在阿里云上,阿里云不开放25端口只能通过转发发送邮件
首先配置yaml文件
spring:
mail:
host: 'smtp.163.com'
username: '*****@163.com'
password: '授权码'
default-encoding: UTF-8
protocol: smtps
properties:
mail.smtp.auth: true
mail.smtp.ssl.enable: true
mail.smtp.starttls.enable: true
mail.smtp.starttls.required: true
mail.smtp.ssl.socketFactory.class: javax.net.ssl.SSLSocketFactory
mail.imap.ssl.socketFactory.fallback: false
mail.imap.ssl.socketFactory.port: 465
声明实体类
根据数据库的需要声明mail实体,这儿主要是用来发送验证码
public class Mail {
private String receiver;
private String code;
private Timestamp time;
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
}
声明异步服务进行实体传输
邮件发送可能存在延时,通过异步任务可以免除等待延时
@Async
public void sendValidateCode(String email) {
SimpleMailMessage message = new SimpleMailMessage();
Mail mail = mailDao.selectMail(email);
if (mail == null){
mail = new Mail();
}
Random random = new Random();
int code = random.nextInt(900000) + 100000;
mail.setCode("" + code);
mail.setReceiver(email);
message.setFrom(emailFrom);
message.setTo(mail.getReceiver());
message.setSubject("感谢您注册Effective");
message.setText("您的验证码为: " + mail.getCode());
if (mailDao.exist(mail.getReceiver())) {
mailDao.updateMail(mail);
} else {
mailDao.insertMail(mail);
}
mailSender.send(message);
}