2016-12-20 3 views
0

Au printemps il y a une option pour définir l'encodage pour l'envoi:Spring: MimeMessageHelper encodage pour les pièces jointes

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

Cela fonctionne très bien pour le sujet et le message de l'e-mail. Cependant, s'il existe une pièce jointe, le codage par défaut de la JVM sera utilisé et spécifié dans le type de contenu de la pièce jointe de l'e-mail (même si vous spécifiez un encodage global dans l'application et/ou via des arguments lors du déploiement le pot).

Est-ce que quelqu'un a réussi à dire à Spring d'utiliser un encodage spécifique pour les pièces jointes? Je sais qu'il ya une façon de le faire en utilisant cette structure:

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

Le problème avec ceci est que maintenant je dois décrire manuellement chaque type de pièce jointe et le codage. S'il n'y a pas d'autre moyen, alors je suppose que c'est la seule façon d'y aller.

Répondre

1

En fin de c'est comment je l'ai résolu (pas la manière la plus propre, mais fonctionne 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; 
    }