Как добавить изображение в шаблон Freemarker с JavaMail - PullRequest
0 голосов
/ 01 февраля 2019

Теперь, прежде чем этот вопрос будет помечен как дубликат, Добавить изображение в шаблон freemarker для почты?

Этот вопрос не дает решения моей проблемы.Поэтому я хочу добавить изображение в качестве фона в HTML-шаблон Freemarker, который я присоединяю к программе Google Gmail API на Java.

Вот код для Freemarker: -

<style>
    body{
background-image: url("cid:${image.jpg}");
}
     .container {
              position: absolute;
              padding:25px;
              margin:25px;
              border:5px;
              text-align: justify;
              text-justify: inter-word;
              font-family: "Times New Roman";
              font-style: italic;
            }
 </style>

И способ вставки изображения с помощью Google Gmail API: -

Multipart multipart = new MimeMultipart();
    MimeBodyPart bodyPart = new MimeBodyPart();
    Template t = freemarkerTemlate.getTemplate("OneEmployee.ftl");
    String mailContent = FreeMarkerTemplateUtils.processTemplateIntoString(t, model);
    bodyPart.setContent(mailContent, "text/html");
    multipart.addBodyPart(bodyPart);

    DataSource fds = new FileDataSource(Mailer.class.getClassLoader().getResource("images/image1.jpg").getFile());
    bodyPart = new MimeBodyPart();
    bodyPart.setDataHandler(new DataHandler(fds));
    bodyPart.setHeader("Content-ID", "<image.jpg>");
    multipart.addBodyPart(bodyPart);

MyИзображения находятся в каталоге ресурсов, который содержит другой каталог изображений

Теперь я попробовал почти все возможные варианты кода, такие как

<img src="">

Добавление cid: в пределах $ {}и также без использования "", но это, кажется, не устанавливает изображение в любом случае.

В некоторых случаях он запускается без присоединения образа, а в некоторых случаях запускается, но также выдает ошибку на консоли: -

Application failed at {image1.jpg}:- Missing or Null Argument 

Модель, которую я использую:-

 Map model = new HashMap();
 model.put("emailNames", emailNames);

Я не добавил ничего в модель, так как это единственное, кроме изображения, которое я вставляю в шаблон свободного маркера

Есть ли что-то, что я делаю?неправильно или отсутствует?

РЕДАКТИРОВАТЬ 2

Я также попытался вставить изображение с помощью модели, установив его в качестве кода ключа, прикрепленного для справки

Map model = new HashMap();
 model.put("emailNames", emailNames);
 model.put("image.jpg", Mailer.class.getClassLoader().getResource("images/image1.jpg").getFile())

Это все еще не работает!

РЕДАКТИРОВАТЬ 2

Интересно, что я заметил, что когда я не определяю cid, то добавляетфоновое изображение как вложение, но всякий раз, когда я добавляю синтаксис cid, оно не добавляется как вложение, а просто игнорирует почту.

Я прочитал в сети, что согласно учебным пособиям вы не передаете Изображение, которое будет вставлено как часть модели, а скорее добавляете его как Приложение, определяющее content_id (cid) Изображения.

Спасибо

1 Ответ

0 голосов
/ 12 февраля 2019

Итак, наконец, я смог получить ответ на решение

Неправильный способ загрузки изображения из папки изображений в ресурсах

File file = new ClassPathResource("image").getFile();

Это способсделать это И при передаче его в шаблон Freemarker вам просто нужно сделать cid:imageURL и все, и это должно работать.

Также вы должны следовать комментариям @Bill Shannon и @Mark Rotteveel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...