2016-12-20 1 views
0

Im Frühjahr gibt es eine Option, um die Codierung für den Versand zu setzen:Spring: MimeMessageHelper Codierung für Anlagen

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

Dies funktioniert gut für Betreff und die Nachricht der E-Mail. Wenn jedoch ein Anhang vorhanden ist, wird die Standardcodierung der JVM verwendet und im Inhaltstyp des Anhangteils der E-Mail angegeben (auch wenn die Codierung während der Bereitstellung global in der Anwendung und/oder durch Argumente angegeben wird) das Gefäss).

Hat es jemand geschafft, Spring zu sagen, dass es auch eine bestimmte Kodierung für E-Mail-Anhänge verwenden soll? Ich weiß, es gibt einen Weg, es zu tun, indem unter Verwendung dieser Struktur:

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

Das Problem dabei ist, dass jetzt ich manuell jeden Anlagentyp und Codierung beschreiben. Wenn es keinen anderen Weg gibt, dann denke ich, das ist der einzige Weg zu gehen.

Antwort

1

Am Ende dieses ist, wie ich es gelöst (nicht die sauberste Weg, funktioniert aber ok):

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