【发布时间】:2021-08-05 21:47:34
【问题描述】:
我有一个发送电子邮件的应用程序。我正在使用模板化的免费标记在电子邮件中呈现表格。 但是我得到“freemarker.core.NonSequenceOrCollectionException:您尝试列出的值是extended_hash(包装器:ftSimpleHash),因此您必须在“as”之后指定两个循环变量;一个用于键,另一个用于值, 像 )。”异常
下面是我的模型类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MessageRequest {
private String centerId;
private String name;
private String pincode;
private String vaccine;
private String fee;
private String available_capacity;
private String date;
}
以下是我的服务电话:
public MailResponse sendEmail() {
List<MessageRequest> messageRequests = new ArrayList<>();
messageRequests.add(new MessageRequest("test id","test name","000001","covaxin","free","100" , DateUtil.getTodayDate()));
MailRequest mailRequest = new MailRequest();
mailRequest.setFrom("electrode.1990@gmail.com");
mailRequest.setName("manjosh");
mailRequest.setToArr(new String[]{"email@gmail.com"});
mailRequest.setSubject("Test email from vaccine slot tracker app");
Map<String,Object> map = new HashMap<>();
map.put("messages",map);
map.put("test",map);
return sendEmail(mailRequest,map);
}
public MailResponse sendEmail(MailRequest request, Map<String, Object> model) {
MailResponse response = new MailResponse();
MimeMessage message = sender.createMimeMessage();
try {
// set mediaType
MimeMessageHelper helper = new MimeMessageHelper(message, MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
StandardCharsets.UTF_8.name());
Template t = config.getTemplate("email-template.ftl");
String html = FreeMarkerTemplateUtils.processTemplateIntoString(t, model);
helper.setTo(request.getToArr());
helper.setText(html, true);
helper.setSubject(request.getSubject());
helper.setFrom(request.getFrom());
sender.send(message);
response.setMessage("mail send to : " + Arrays.stream(request.getToArr()).sequential());
response.setStatus(Boolean.TRUE);
}catch (MessagingException | IOException | TemplateException e) {
response.setMessage("Mail Sending failure : "+e.getMessage());
response.setStatus(Boolean.FALSE);
}
return response;
}
我的模板是:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Vaccine availability tracker</title>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" valign="top"
style="background-color: #F0F8FF;"><br> <br>
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr class="tableHeader">
<td>Center Id</td>
<td>Center name</td>
<td>Area Pincode</td>
<td>Vaccine</td>
<td>Vaccine fee</td>
<td>Available capacity</td>
<td>Date</td>
</tr>
<#list messages as key, value>
<#list value as item>
<tr class="tableBody">
<td>${item.centerId}</td>
<td>${item}</td>
<td>${item.name}</td>
<td>${item.pincode}</td>
<td>${item.vaccine}</td>
<td>${item.fee}</td>
<td>${item.date}</td>
</tr>
</#list>
</#list>
</table> <br> <br></td>
</tr>
</table>
</body>
</html>
【问题讨论】:
标签: java spring-boot freemarker