peternameyakj
2024-10-15 19d0fd2c0e7860e2d5d075f926df0d190ebb34cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package email.internal;
 
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Map;
import java.util.Properties;
 
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import javax.net.ssl.HttpsURLConnection;
 
import com.sun.mail.util.MailSSLSocketFactory;
import email.EmailPropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
 
import email.sender.EmailMessage;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import kernel.util.StringUtils;
 
public class InternalEmailSenderServiceImpl implements InternalEmailSenderService, InitializingBean {
    private JavaMailSenderImpl mailSender;
    private static final Logger logger = LoggerFactory.getLogger(InternalEmailSenderServiceImpl.class);
    private SimpleMailMessage mailMessage;
    private FreeMarkerConfigurer freeMarkerConfigurer;
 
    @Override
    public void afterPropertiesSet() throws GeneralSecurityException {
        // 设置 TLS 协议
        System.setProperty("https.protocols", "TLSv1.2,TLSv1.3");
 
        mailSender = new JavaMailSenderImpl();
        mailSender.setUsername(EmailPropertiesUtil.getProperty("email.username"));
        mailSender.setPassword(EmailPropertiesUtil.getProperty("email.password"));
        mailSender.setHost(EmailPropertiesUtil.getProperty("email.host"));
 
        Properties javaMailProperties = new Properties();
        javaMailProperties.setProperty("mail.smtp.port", "465");
        javaMailProperties.setProperty("mail.smtp.auth", "true");
        javaMailProperties.setProperty("mail.smtp.ssl.enable", "true");
        javaMailProperties.setProperty("mail.debug", "true");
        javaMailProperties.setProperty("mail.smtp.host", "smtp.gmail.com");
 
        mailSender.setJavaMailProperties(javaMailProperties);
 
        mailMessage = new SimpleMailMessage();
        mailMessage.setFrom(EmailPropertiesUtil.getProperty("email.from"));
 
        freeMarkerConfigurer = new FreeMarkerConfigurer();
        freeMarkerConfigurer.setTemplateLoaderPath("classpath:email/ftl");
        Properties settings = new Properties();
        settings.setProperty("template_update_delay", "1800");
        settings.setProperty("default_encoding", "UTF-8");
        settings.setProperty("locale", "zh_CN");
        freeMarkerConfigurer.setFreemarkerSettings(settings);
    }
 
    @Override
    public void send(EmailMessage emailMessage) {
        try {
            System.out.println("-----进到邮件发送-----");
            MimeMessage mailMsg = this.mailSender.createMimeMessage();
            System.out.println("----------邮件发送,接收邮箱:"+emailMessage.getTomail()+"发送邮箱:"+this.mailMessage.getFrom());
            MimeMessageHelper messageHelper = new MimeMessageHelper(mailMsg, true, "UTF-8");
            messageHelper.setTo(emailMessage.getTomail());// 接收邮箱
            messageHelper.setFrom(this.mailMessage.getFrom());// 发送邮箱
            messageHelper.setSentDate(new Date());// 发送时间
            messageHelper.setSubject(emailMessage.getSubject());// 邮件标题
 
            if (StringUtils.isNullOrEmpty(emailMessage.getFtlname())) {
                messageHelper.setText(emailMessage.getContent());// 邮件内容
            } else {
                messageHelper.setText(this.getMailText(emailMessage.getFtlname(), emailMessage.getMap()), true);// 邮件内容
            }
            System.out.println("-----1111111-----");
            // true 表示启动HTML格式的邮件
            if (emailMessage.getFile() != null) {
                // 添加邮件附件
                FileSystemResource rarfile = new FileSystemResource(emailMessage.getFile());
 
                // addAttachment addInline 两种附件添加方式
                // 以附件的形式添加到邮件
                // 使用MimeUtility.encodeWord 解决附件名中文乱码的问题
                messageHelper.addAttachment(MimeUtility.encodeWord(emailMessage.getFilename()), rarfile);
            }
            System.out.println("-----邮件开始发送-----开始");
            this.mailSender.send(mailMsg);// 发送
            System.out.println("-----邮件开始发送-----成功");
        } catch (MessagingException e) {
            logger.error("邮件发送失败【MessagingException】"+e.getMessage(), e);
            System.out.println(e.getMessage());
        } catch (UnsupportedEncodingException e) {
            logger.error("邮件发送失败【UnsupportedEncodingException】"+e.getMessage(), e);
            System.out.println(e.getMessage());
        }catch (Exception e){
            logger.error("邮件发送失败【Exception】"+"邮件发送失败"+e.getMessage(), e);
            System.out.println(e.getMessage());
        }
 
    }
 
    /**
     * 获取模板并将内容输出到模板
     * 
     * @param content
     * @return
     */
    private String getMailText(String ftlname, Map<String, Object> map) {
        String html = "";
 
        try {
 
            // 装载模板
            Template tpl = this.freeMarkerConfigurer.getConfiguration().getTemplate(ftlname);
            // 加入map到模板中 输出对应变量
            html = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map);
 
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        return html;
    }
 
    public void setMailSender(JavaMailSenderImpl mailSender) {
        this.mailSender = mailSender;
    }
 
    public void setMailMessage(SimpleMailMessage mailMessage) {
        this.mailMessage = mailMessage;
    }
 
    public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
        this.freeMarkerConfigurer = freeMarkerConfigurer;
    }
 
}