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?
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
Das Problem liegt bei der MimeType
Bestimmung
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
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.