it-swarm.com.de

Verhindern, dass gmail Inline-Bilder als Anhänge anzeigt

Ich verwende die spring samples , um Inline-Bilder zu senden. Es funktioniert, aber Google Mail zeigt Bilder auch als Anhänge. Wie vermeide ich es?

 enter image description here

Der Code ist ziemlich einfach.

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

}

Meine Frage ist ähnlich wie Wie kann ich verhindern, dass eingebettete Bilder in E-Mails von GMail als Anhang angezeigt werden? aber die Antwort ist sehr alt und zeigt nicht, wie man den Frühling richtig konfiguriert. Ich möchte die Nachrichtenteile und Header nicht selbst erstellen


Hat die rohe Nachricht in Pastebin gepostet

8
pedrofb

Das Problem liegt bei der MimeType Bestimmung

 MimeType

Die Erweiterung png wird als image/x-png anstelle von image/png behandelt. Dies verursacht das Problem mit Google Mail. Dies wurde in 5.X behoben/geändert und kann sich auch in einer späteren 4.X-Version befinden (ich bin nicht sicher, welche). Das Update ist jedoch ganz einfach. Veränderung

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

zu

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

    }
};

Und es wird die MimeType zu image/png überschreiben

 Inline image

11
Tarun Lalwani

Ich habe Ihren Code ausgeführt. Es funktioniert einwandfrei: Ich öffne die resultierende E-Mail in gmail, sehe das Inline-Image und sehe keinen Anhang!. Ich habe die 5.0.5.RELEASE verwendet.

Wenn dies nicht die Lösung ist, haben Sie möglicherweise eine ungewöhnliche Eigenschaft in Ihrem SmtpServer.toJavaMailSender () oder Ihren Google Mail-Einstellungen.

0
luca.vercelli