| package com.vincent.rsf.server.common.service; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.vincent.rsf.common.utils.Utils; | 
| import com.vincent.rsf.framework.common.Cools; | 
| import com.vincent.rsf.server.system.enums.EmailType; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.mail.MailException; | 
| import org.springframework.mail.javamail.JavaMailSender; | 
| import org.springframework.mail.javamail.MimeMessageHelper; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import javax.mail.MessagingException; | 
| import javax.mail.internet.MimeMessage; | 
| import java.util.Map; | 
| import java.util.regex.Matcher; | 
| import java.util.regex.Pattern; | 
|   | 
| @Slf4j | 
| @Service | 
| public class EmailService { | 
|   | 
|     private static final String EMAIL_REGEX = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"; | 
|   | 
|     @Value("${spring.mail.username}") | 
|     private String from; | 
|   | 
|     @Autowired | 
|     @SuppressWarnings("all") | 
|     private JavaMailSender mailSender; | 
|   | 
|     public boolean sendEmail(String to, EmailType emailType, Map<String, Object> param) { | 
|   | 
|         String subject = emailType.subject; | 
|         String content = emailType.content; | 
|         if (!Cools.isEmpty(param) && !param.isEmpty()) { | 
|             content = Utils.processTemplate(content, param); | 
|         } | 
|   | 
|         boolean sendRes = this.send(this.from, to, subject, content); | 
|         if (sendRes) { | 
|             log.info("Email sent successfully. To: {}, Subject: {}, Parameter: {}" | 
|                     , to | 
|                     , subject | 
|                     , JSON.toJSONString(param)); | 
|         } | 
|         return sendRes; | 
|     } | 
|   | 
|     public boolean send(String from, String to, String subject, String content) { | 
|         try { | 
|             MimeMessage message = mailSender.createMimeMessage(); | 
|             message.setFrom(from); | 
|   | 
|             MimeMessageHelper helper = new MimeMessageHelper(message, true); | 
|             helper.setTo(to); | 
|             helper.setSubject(subject); | 
|             helper.setText(content); | 
|   | 
|             mailSender.send(message); | 
|             return true; | 
|         } catch (MailException | MessagingException e) { | 
|             log.error(this.getClass().getSimpleName(), e); | 
|             return false; | 
|         } | 
|     } | 
|   | 
|     public boolean isValid(String email) { | 
|         if (Cools.isEmpty(email)) { | 
|             return false; | 
|         } | 
|         Pattern pattern = Pattern.compile(EMAIL_REGEX); | 
|         Matcher matcher = pattern.matcher(email); | 
|         return matcher.matches(); | 
|     } | 
|   | 
| } |