it-roy-ru.com

Запретить в Gmail показывать встроенные изображения в виде вложений

Я использую spring samples для отправки встроенных изображений. Это работает, но Gmail показывает изображения также в виде вложений. Как этого избежать?

 enter image description here

Код довольно прост.

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

}

Мой вопрос похож на Как остановить встроенные изображения в электронной почте, которые GMail отображает в виде вложений? но ответ очень старый и не показывает, как правильно настроить пружину. Я не хочу сам создавать части и заголовки сообщений


Размещено сырое сообщение в Pastebin

8
pedrofb

Проблема связана с определением MimeType

 MimeType

Расширение png рассматривается как image/x-png вместо image/png, что вызывает проблему с Gmail. Это было исправлено/изменено в 5.X и может также быть в некоторых 4.X более поздних версиях (я не уверен в них). Но исправить это довольно просто. + Изменить

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

    }
};

И он переопределит MimeType в image/png

 Inline image

11
Tarun Lalwani

Я выполнил твой код. Он отлично работает: я открываю полученное письмо в gmail, вижу встроенное изображение и не вижу вложений! Это может быть связано с версией библиотеки? Я использовал 5.0.5.RELEASE.

Если это не решение, я думаю, у вас может быть какое-то необычное свойство в вашем SmtpServer.toJavaMailSender () или в ваших настройках Gmail.

0
luca.vercelli