邮件对象
import lombok.Data;
import java.util.Date;
@Data
public class Email {
private String subject;
private String content;
private String recipients;
private Date sendTime;
private boolean usePassword = true;
}
发送邮件工具类
import com.paratera.console.notice.model.message.Email;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
@Component
@Slf4j
public class EmailUtil {
@Value("${console.email.sendaddress}")
private String sendAddress;
@Value("${console.email.password}")
private String password;
@Value("${console.email.smtpserver}")
private String smtpServer;
public void send(Email email) throws MessagingException {
if (email.isUsePassword()) {
sendByPassword(email);
return;
}
sendByAuthCode(email);
}
private void sendByAuthCode(Email email) throws MessagingException {
Properties props = System.getProperties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", smtpServer);
Session session = Session.getInstance(props);
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message = getContent(message, email);
try {
Transport transport = session.getTransport();
transport.connect(sendAddress, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
log.info("邮件发送成功:" + email);
} catch (Exception e) {
log.info("邮件发送失败:" + email + ",异常原因:" + e);
}
}
private void sendByPassword(Email email) throws MessagingException {
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", smtpServer);
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(sendAddress, password);
}
});
MimeMessage message = new MimeMessage(session);
message = getContent(message, email);
try {
Transport.send(message);
log.info("邮件发送成功:" + email);
} catch (Exception e) {
log.info("邮件发送失败:" + email + ",异常原因:" + e);
}
}
private MimeMessage getContent(MimeMessage message, Email email) throws MessagingException {
if (StringUtils.isEmpty(email.getSubject())) {
throw new MessagingException("邮件标题不能为空");
}
if (StringUtils.isEmpty(email.getContent())) {
throw new MessagingException("邮件内容不能为空");
}
Date sendTime = email.getSendTime() == null ? new Date() : email.getSendTime();
message.setSentDate(sendTime);
message.setSubject(email.getSubject(), "UTF-8");
message.setContent(email.getContent(), "text/html;charset=UTF-8");
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email.getRecipients()));
message.setFrom(new InternetAddress(sendAddress));
return message;
}
}
邮箱有效性校验接口
public void sendEmailCode(String email) throws MessagingException {
Email mail = new Email();
mail.setSubject("邮箱验证码,有效时间五分钟,重试无效!");
mail.setRecipients(email);
String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
mail.setContent(code);
emailUtil.send(mail);
redisTemplate.opsForValue().set(EMAIL_UUID + email, code, 5, TimeUnit.MINUTES);
}
public boolean validateEmailCode(String email, String code) {
if (StringUtils.equals(redisTemplate.opsForValue().get(EMAIL_UUID + email), code)) {
redisTemplate.delete(EMAIL_UUID + email);
return true;
}
return false;
}