web-dev-qa-db-fra.com

Empêcher gmail d'afficher des images en ligne en tant que pièces jointes

J'utilise les Spring samples pour envoyer des images en ligne. Cela fonctionne, mais Gmail affiche également les images en pièces jointes. Comment l'éviter?

 enter image description here

Le code est assez simple.

public class Email {

    public static  MimeMessagePreparator getContentAsInlineResourceMessagePreparator(final String to) {

        MimeMessagePreparator preparator = new MimeMessagePreparator() {

            public void prepare(MimeMessage mimeMessage) throws Exception {
                MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");

                helper.setSubject("Email with inline image");
                helper.setFrom("[email protected]");
                helper.setTo(to);

                String content = "Dear pedrofb...";
                helper.setText("<html><body><p>" + content + "</p><img src='cid:company-logo'></body></html>", true);
                helper.addInline("company-logo", new ClassPathResource("logo.png"));
            }
        };
        return preparator;
    }
    public final static void main (String argv[]){
        //Basic SMTP configuration
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(Host);
        mailSender.setPort(port);

        MimeMessagePreparator preparator = getContentAsInlineResourceMessagePreparator("[email protected]");            
        mailSender.send(preparator);
    }

}

Ma question est similaire à Comment arrêter les images incorporées dans les e-mails qui sont affichées en tant que pièces jointes par GMail? mais la réponse est très ancienne et ne montre pas comment configurer correctement le ressort. Je ne veux pas construire le message parties & en-têtes moi-même


Posté le message brut dans Pastebin

8
pedrofb

Le problème est lié à la détermination MimeType

 MimeType

L'extension png est traitée en tant que image/x-png au lieu de image/png, ce qui cause le problème avec Gmail. Ceci a été corrigé/modifié dans 5.X et peut également être dans une version ultérieure de 4.X également (je ne suis pas sûr de ceux-là). Mais la solution est assez facile. Changement

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

à

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8") {

    @Override
    public void addInline(String contentId, Resource resource) throws MessagingException {
        Assert.notNull(resource, "Resource must not be null");
        String contentType = this.getFileTypeMap().getContentType(resource.getFilename());
        contentType = contentType.replace("x-png", "png");
        this.addInline(contentId, resource, contentType);

    }
};

Et cela remplacera la MimeType en image/png

 Inline image

11
Tarun Lalwani

J'ai exécuté votre code. Cela fonctionne parfaitement: j'ouvre l'email résultant dans gmail, je vois l'image en ligne et je ne vois aucune pièce jointe! J'ai utilisé le 5.0.5.LELEASE.

Si ce n'est pas la solution, je suppose que vous pouvez avoir une propriété inhabituelle dans votre SmtpServer.toJavaMailSender () ou dans vos paramètres Gmail.

0
luca.vercelli