java freemarker 协议_Java +Freemarker实现发送邮件

jar

org.springframework.boot

spring-boot-starter-mail

Mail邮件对象

public class Mail implements Serializable {

private static final long serialVersionUID = 1L;

//接收方邮件

private String email;

//主题

private String subject;

//模板

private String template;

// 自定义参数

private Map params;

}

实现

@Component

public class MailSendService {

Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

private JavaMailSender javaMailSender;

@Autowired

private FreeMarkerConfigurer freeMarkerConfigurer;

//发件人

@Value("${spring.mail.username}")

private String fromMail;

//主题名称

//@Value("${mail.subjectName}")

//private String subjectName;

/**

* 根据模板名 获取邮件内容

*/

private String getMailTextByTemplateName(String templateName, Map params) throws IOException, TemplateException {

try {

String mailText = "";

//通过指定模板名获取FreeMarker模板实例

Template template = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);

mailText = FreeMarkerTemplateUtils.processTemplateIntoString(template, params);

return mailText;

}catch (TemplateNotFoundException e) {

//若找不到指定模板则使用默认模板

templateName="busi_situation.ftl";

Template template = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);

return FreeMarkerTemplateUtils.processTemplateIntoString(template, params);

}

}

public Result sendWithHTMLTemplate(Mail mail) {

try {

String email = mail.getEmail();

if (StringUtil.isBlank(email)) {

return ResultUtil.error("邮箱email不能为空!");

}

if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) {

return ResultUtil.error("邮箱email格式不正确!");

}

//发件人昵称

String nick = MimeUtility.encodeText(fromMail);

//发件人

InternetAddress from = new InternetAddress(nick + "");

MimeMessage mimeMessage = javaMailSender.createMimeMessage();

MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);

//收件人

mimeMessageHelper.setTo(email);

mimeMessageHelper.setFrom(from);

//图片

String fileUrl = this.getClass().getClassLoader().getResource("public/static/img/mail/logo.png").getPath();

FileSystemResource img1 = new FileSystemResource(new File(fileUrl));

mimeMessageHelper.addInline("logo1", img1);

FileSystemResource img2 = new FileSystemResource(new File(fileUrl));

mimeMessageHelper.addInline("logo2", img2);

//附件

String filePath= this.getClass().getClassLoader().getResource("public/static/img/mail/text.txt").getPath();

FileSystemResource file=new FileSystemResource(new File(filePath));

String fileName=filePath.substring(filePath.lastIndexOf(File.separator));

//添加多个附件可以使用多条

mimeMessageHelper.addAttachment(fileName,file);

Map params = mail.getParams();

mail.setParams(params);

mimeMessageHelper.setSubject(subjectName);

// 使用模板生成html邮件内容

String result = getMailTextByTemplateName(mail.getTemplate(), mail.getParams());

mimeMessageHelper.setText(result, true);

javaMailSender.send(mimeMessage);

return ResultUtil.success("邮件发送成功");

} catch (Exception e) {

logger.error("发送邮件失败" + e.getMessage());

return ResultUtil.error("发送邮件时发生异常:" + e.getMessage());

}

}

}

邮件服务器SSL安全证书认证

public class MailSocketFactory extends SSLSocketFactory {

private SSLSocketFactory factory;

public MailSocketFactory() {

try {

// 获取一个SSLContext实例

SSLContext sslcontext = SSLContext.getInstance("TLS");

sslcontext.init(null, new TrustManager[]{new MailTrustManager()}, null);

//从上述SSLContext对象中得到SSLSocketFactory对象

factory = sslcontext.getSocketFactory();

} catch (Exception ex) {

// ignore

}

}

public static SocketFactory getDefault() {

return new MailSocketFactory();

}

@Override

public Socket createSocket() throws IOException {

return factory.createSocket();

}

@Override

public Socket createSocket(Socket socket, String s, int i, boolean flag) throws IOException {

return factory.createSocket(socket, s, i, flag);

}

@Override

public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) throws IOException {

return factory.createSocket(inaddr, i, inaddr1, j);

}

@Override

public Socket createSocket(InetAddress inaddr, int i) throws IOException {

return factory.createSocket(inaddr, i);

}

@Override

public Socket createSocket(String s, int i, InetAddress inaddr, int j) throws IOException {

return factory.createSocket(s, i, inaddr, j);

}

@Override

public Socket createSocket(String s, int i) throws IOException {

return factory.createSocket(s, i);

}

@Override

public String[] getDefaultCipherSuites() {

return factory.getDefaultCipherSuites();

}

@Override

public String[] getSupportedCipherSuites() {

return factory.getSupportedCipherSuites();

}

}

证书信任管理器

public class MailTrustManager implements X509TrustManager {

@Override

public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

//返回受信任的X509证书数组。

@Override

public X509Certificate[] getAcceptedIssuers() {

return new X509Certificate[0];

}

}

配置文件

spring.mail.default-encoding=UTF-8

spring.mail.host=mail.x'x'x.x'x'x.xxx

spring.mail.username=x'x'xxxxxxx

spring.mail.password=x'x'xxxx

# 协议

spring.mail.protocol=smtp

spring.mail.port=x'x'x

spring.mail.properties.mail.smtp.auth=truexxx

spring.mail.properties.mail.smtp.starttls.enable=false

spring.mail.properties.mail.smtp.starttls.required=false

spring.mail.properties.mail.smtp.socketFactory.port=x'x'x

## SSL认证工厂

spring.mail.properties.mail.smtp.socketFactory.class=com.xxx.msg.impl.MailSocketFactory

spring.mail.properties.mail.smtp.socketFactory.fallback=false

freemarrker模板

截至邮件发送时间

xxx

${data.sum}

xxx

${data.sum}

xxx

xxx

名称

${item[itemKey]}

#if>

#list>

#list>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*.xml) 3.用Firstobject free XML editor打开文件,选择Tools下的Indent【或者按快捷键F8】格式化文件内容。左边是文档结构,右边是文档内容; 4. 文档生成后有时需要手动修改,查找第一步中设置的属性名,可能会产生类似${n.....ame}类似的样子,我们将将名字中间的标签删掉,恢复为${name} 5. word模板中有表格,需要循环的位置, 用 标签将第二对 标签(即除表头的w:tr标签后的一对)包围起来 同时表格内的属性例如${name},在这里需要修改为${user.name} (userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用,注意这里的标签不要和某对其他标签交叉,不可以出现这种 6. 标识替换完之后,另存为.ftl后缀文件即可。 代码里是相对有一丢丢复杂的,两层嵌套循环; 总(dataMap) deptName 部门名 list(Table)表的集合 table1(map) table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table2 table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table3 ……

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值