Spring:附件的MimeMessageHelper编码

时间:2016-12-20 07:58:50

标签: java spring email content-type mime-message

在Spring中,可以选择设置邮件编码:

MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");

这适用于电子邮件的主题和消息。

但是,如果存在附件,则将在电子邮件的附件部分的Content-Type中使用和指定JVM的默认编码(即使在部署时在应用程序中全局指定编码和/或通过参数指定编码罐)。

是否有人设法告诉Spring也使用特定的邮件附件编码?我知道有一种方法可以通过使用这种结构来实现:

messageHelper.addAttachment(filename, new InputStreamSource() {
    @Override
    public InputStream getInputStream () throws IOException {
        return file.getInputStream();
        }
    }, "text/plain; charset=UTF-8");

问题在于现在我必须手动描述每种附件类型和编码。如果没有其他办法,那么我想这是唯一的出路。

1 个答案:

答案 0 :(得分:1)

最后这就是我解决它的方式(不是最干净的方式,但工作正常):

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;
    }