Spring:附件的 MimeMessageHelper 编码
Spring: MimeMessageHelper encoding for attachments
在 Spring 中有一个设置邮件编码的选项:
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
这对电子邮件的主题和信息非常有用。
但是如果有附件,将使用 JVM 的默认编码并在电子邮件附件部分的内容类型中指定(即使在应用程序中全局指定编码 and/or 通过部署 jar 时的参数)。
有没有人设法告诉 Spring 也对邮件附件使用特定的编码?我知道有一种方法可以使用这种结构来做到这一点:
messageHelper.addAttachment(filename, new InputStreamSource() {
@Override
public InputStream getInputStream () throws IOException {
return file.getInputStream();
}
}, "text/plain; charset=UTF-8");
问题是现在我必须手动描述每个附件类型和编码。如果没有其他办法,那么我想这是唯一的办法。
最后我就是这样解决的(不是最干净的方法,但工作正常):
private String determineContentType(String fileName) {
String contentType;
if (fileName.contains(".txt")) {
contentType = "text/plain; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".xls")) {
contentType = "application/vnd.ms-excel; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".pdf")) {
contentType = "application/pdf; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".doc")) {
contentType = "application/msword; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".xml")) {
contentType = "text/xml; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".zip")) {
contentType = "application/zip; charset=" + mailProperties.getEncoding();
}
else {
contentType = "text/plain; charset=" + mailProperties.getEncoding();
}
return contentType;
}
在 Spring 中有一个设置邮件编码的选项:
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
这对电子邮件的主题和信息非常有用。
但是如果有附件,将使用 JVM 的默认编码并在电子邮件附件部分的内容类型中指定(即使在应用程序中全局指定编码 and/or 通过部署 jar 时的参数)。
有没有人设法告诉 Spring 也对邮件附件使用特定的编码?我知道有一种方法可以使用这种结构来做到这一点:
messageHelper.addAttachment(filename, new InputStreamSource() {
@Override
public InputStream getInputStream () throws IOException {
return file.getInputStream();
}
}, "text/plain; charset=UTF-8");
问题是现在我必须手动描述每个附件类型和编码。如果没有其他办法,那么我想这是唯一的办法。
最后我就是这样解决的(不是最干净的方法,但工作正常):
private String determineContentType(String fileName) {
String contentType;
if (fileName.contains(".txt")) {
contentType = "text/plain; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".xls")) {
contentType = "application/vnd.ms-excel; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".pdf")) {
contentType = "application/pdf; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".doc")) {
contentType = "application/msword; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".xml")) {
contentType = "text/xml; charset=" + mailProperties.getEncoding();
}
else if (fileName.contains(".zip")) {
contentType = "application/zip; charset=" + mailProperties.getEncoding();
}
else {
contentType = "text/plain; charset=" + mailProperties.getEncoding();
}
return contentType;
}