rk
3 小时以前 c74a6f59490cfb9a0ee37f70427739b74e7fbd58
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
package com.doumee.service.common;
 
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
 
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.List;
import java.util.Map;
 
@Slf4j
@Service
public class EmailService {
 
    @Autowired
    private JavaMailSender javaMailSender;
 
    @Value("${spring.mail.username}")
    private String fromEmail;
 
    /**
     * 发送纯文本邮件
     */
    public boolean sendText(String toEmail, String subject, String text) {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setTo(toEmail);
            message.setFrom(fromEmail);
            message.setSubject(subject);
            message.setText(text);
            javaMailSender.send(message);
            log.info("纯文本邮件发送成功: to={}", toEmail);
            return true;
        } catch (Exception e) {
            log.error("纯文本邮件发送失败: to={}, error={}", toEmail, e.getMessage());
            return false;
        }
    }
 
    /**
     * 发送HTML邮件
     */
    public boolean sendHtml(String toEmail, String subject, String html) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(toEmail);
            helper.setFrom(fromEmail);
            helper.setSubject(subject);
            helper.setText(html, true);
            javaMailSender.send(message);
            log.info("HTML邮件发送成功: to={}", toEmail);
            return true;
        } catch (Exception e) {
            log.error("HTML邮件发送失败: to={}, error={}", toEmail, e.getMessage());
            return false;
        }
    }
 
    /**
     * 发送带附件邮件
     * @param fileList 附件列表,每个Map包含 name(文件名) 和 file(File对象)
     */
    public boolean sendWithAttachment(String toEmail, String subject, String text, List<Map<String, Object>> fileList) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(toEmail);
            helper.setFrom(fromEmail);
            helper.setSubject(subject);
            helper.setText(text);
            if (fileList != null) {
                for (Map<String, Object> f : fileList) {
                    helper.addAttachment((String) f.get("name"), new FileSystemResource((File) f.get("file")));
                }
            }
            javaMailSender.send(message);
            log.info("附件邮件发送成功: to={}", toEmail);
            return true;
        } catch (Exception e) {
            log.error("附件邮件发送失败: to={}, error={}", toEmail, e.getMessage());
            return false;
        }
    }
 
    /**
     * 发送带内嵌图片的HTML邮件
     * @param contentForm 表单内容键值对
     * @param imgList     图片URL列表
     */
    public boolean sendWithInlineImage(String toEmail, String subject, Map<String, String> contentForm, List<String> imgList) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(toEmail);
            helper.setFrom(fromEmail);
            helper.setSubject(subject);
            StringBuilder content = new StringBuilder("<html><body>");
            if (contentForm != null) {
                for (Map.Entry<String, String> entry : contentForm.entrySet()) {
                    content.append("<div style='display:block;'>").append(entry.getKey()).append(":").append(entry.getValue()).append("</div>");
                }
            }
            if (imgList != null) {
                content.append("<div style='display:block;'>");
                for (String img : imgList) {
                    content.append("<a href='").append(img).append("' target='blank'><img style='width:200px;margin:5px' src='").append(img).append("'/></a>");
                }
                content.append("</div>");
            }
            content.append("</body></html>");
            helper.setText(content.toString(), true);
            javaMailSender.send(message);
            log.info("图片邮件发送成功: to={}", toEmail);
            return true;
        } catch (Exception e) {
            log.error("图片邮件发送失败: to={}, error={}", toEmail, e.getMessage());
            return false;
        }
    }
}