java使用自定义HTML模板发送邮件——记录开发篇1

java使用自定义HTML模板发送email

VO接收参数

@Data
public class EmailVo {

    @ApiModelProperty("收件人列表")
    @NotNull(message = "收件人列表为空")
    private List<String> tos;

    @ApiModelProperty("抄送人列表")
    private List<String> ccs;

    @ApiModelProperty("邮件标题")
    @NotNull(message = "邮件标题为空")
    private String subject;

    @ApiModelProperty("项目编码")
    @NotNull(message = "项目编码为空")
    private String projectCode;

    @ApiModelProperty("模板代码")
    @NotNull(message = "模板代码为空")
    private String templateCode;

    @ApiModelProperty("HTML模板参数")
    private Map<String,Object> templateParameters;
}

该html模板应需求为数据库表动态配置,也可写死为html文件放在resource

@Slf4j
@Service("emailService")
public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private HtmlTemplateDao htmlTemplateDao;

    @Value("${mail.from}")
    private String from;
    /**
     * XXXX-发送邮件统一接口
     * @param emailVo
     * @param request
     * @return
     */
    @Override
    public CommonResponse sendEmails(EmailVo emailVo, HttpServletRequest request) {
        if(emailVo.getTos().size() == 0){
            return CommonResponse.createValidateErrorResponse();
        }
        String[] tos = new String[emailVo.getTos().size()];
        for (int i = 0; i < emailVo.getTos().size(); i++) {
            if(isEmail(emailVo.getTos().get(i))){
                tos[i] = emailVo.getTos().get(i);
            }
        }
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(tos);
            //发送抄送人
            if(emailVo.getCcs() != null && emailVo.getCcs().size() != 0){
                String[] ccs = new String[emailVo.getCcs().size()];
                for (int i = 0; i < emailVo.getCcs().size(); i++) {
                    if(isEmail(emailVo.getCcs().get(i))){
                        ccs[i] = emailVo.getCcs().get(i);
                    }
                }
                helper.setCc(ccs);
            }
            helper.setSubject(emailVo.getSubject());

            //查询html模板
            String htmlText = null;
            EntityWrapper<HtmlTemplate> wrapper = new EntityWrapper<>();
            wrapper.eq("cancelsign","n")
                    .eq("project_code",emailVo.getProjectCode())
                    .eq("template_code",emailVo.getTemplateCode());
            List<HtmlTemplate> htmlTemplates = htmlTemplateDao.selectList(wrapper);
            if(htmlTemplates.size() > 0){
                htmlText = htmlTemplates.get(0).getHtmlTemplate();
            }else{
                return CommonResponse.createValidateErrorResponse();
            }
            helper.setText(buildContent(htmlText,emailVo.getTemplateParameters()), true);
            mailSender.send(message);
        } catch (Exception e) {
            log.error("XXXX-发送邮件失败:email={},logs={}", emailVo.toString(),e.getMessage());
            return CommonResponse.createValidateErrorResponse();
        }
        log.info("XXXX-发送邮件成功:email={}", emailVo.toString());
        return CommonResponse.createCommonResponse();
    }

    /**
     * 获取html模板,填充html模板中的动态参数
     * @param htmlText
     * @param templateParameters
     * @return
     */
    private String buildContent(String htmlText, Map<String,Object> templateParameters){
        if(!templateParameters.isEmpty() && templateParameters != null){
            for (Map.Entry<String, Object> entry : templateParameters.entrySet()) {
                htmlText = htmlText.replace("{"+entry.getKey()+"}", entry.getValue().toString());
            }
        }
        //改变表格样式
        htmlText = htmlText.replaceAll("<td>", "<td style=\"padding:6px 10px; line-height: 150%;\">");
        htmlText = htmlText.replaceAll("<tr>", "<tr style=\"border-bottom: 1px solid #eee; color:#666;\">");
        return htmlText;
    }

    /**
     * 判断邮箱合法性
     * @param string
     * @return
     */
    public boolean isEmail(String string) {
        if (string == null)
            return false;
        String regEx1 = "^([a-z0-9A-Z]+[_-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern p;
        Matcher m;
        p = Pattern.compile(regEx1);
        m = p.matcher(string);
        if (m.matches())
            return true;
        else
            return false;
    }
}

html例子

<body style="color: #666; font-size: 14px; font-family: 'Open Sans',Helvetica,Arial,sans-serif;">
<div class="box-content" style="width: 80%; margin: 20px auto; max-width: 800px; min-width: 600px;">
    <div class="info-top" style="padding: 15px 25px;
                                 border-top-left-radius: 10px;
                                 border-top-right-radius: 10px;
                                 background: #00549f;
                                 color: #fff;
                                 overflow: hidden;
                                 line-height: 32px;">
        <div style="font-size: 35px;text-align: center;color:#010e07"><strong>XXIT平台</strong></div>
    </div>
    <div class="info-wrap" style="border-bottom-left-radius: 10px;
                                  border-bottom-right-radius: 10px;
                                  border:1px solid #ddd;
                                  overflow: hidden;
                                  padding: 15px 15px 20px;">
        <div class="tips" style="padding:15px;">
            <p style=" list-style: 160%; margin: 10px 0;">Dear {greetName},</p>
            <p style=" list-style: 160%; margin: 10px 0;">{content}</p>
        </div>
        <div class="time" style="text-align: right; color: #999; padding: 0 15px 15px;">签名:{sign}</div>
        <br>
    </div>
</div>
</body>

配置文件

mail.from = ${mail_from:XXX}
spring.mail.host = ${spring_mail_host:XXX}
spring.mail.username = ${spring_mail_username:XXX}
spring.mail.password = ${spring_mail_password:XXX}
spring.mail.port= ${spring_mail_port:XXX}
spring.mail.properties.mail.smtp.auth = ${spring_mail_properties_mail_smtp_auth:false}
spring.mail.properties.mail.smtp.starttls.enable = ${spring_mail_properties_mail_smtp_starttls_enable:false}
spring.mail.properties.mail.smtp.starttls.required = ${spring_mail_properties_mail_smtp_starttls_required:false}
spring.mail.default-encoding = ${spring_mail_default-encoding:UTF-8}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值