Вложение + Электронная почта + HTML + Play Framework - PullRequest
2 голосов
/ 07 мая 2011

Я использую игровую среду в этом проекте и пытаюсь отправить электронное письмо с прикрепленным логотипом, но хочу показать этот логотип как часть моего HTML-кода!

Мой почтовик:EmailAttachment attachment = new EmailAttachment ();attachment.setDescription ( "Логотип");attachment.setName ( "logoMail.jpg");attachment.setPath (Play.getFile ("/ public / images / email / logoMail.jpg"). getPath ());

addAttachment (attachment);

Мой HTML


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

Что я делаю не так?

Спасибовам очень нравится!

Ответы [ 4 ]

1 голос
/ 03 июля 2011

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

Насколько я вижу, для использования встроенных изображений вложение изображенийна нем должен быть заголовок Content-ID.Прикрепление изображения с помощью addAttachment создает вложение без этого заголовка.

Базовая структура электронной почты, apache commons email, позволяет встраивать изображения с помощью метода HtmlEmail.embed, и пример этого есть в документации Play., но только при использовании электронной почты Commons напрямую.addAttachment () добавит обычное вложение, а не встроенное.

Проблема в том, что HtmlEmail.embed возвращает идентификатор содержимого для встроенного изображения.Первая проблема состоит в том, что должен существовать механизм для передачи этого идентификатора контента в шаблон, чтобы вы могли ссылаться на него в соответствующей ссылке.

Вторая проблема заключается в том, как Mailer.send() метод закодирован, само электронное письмо не создается до тех пор, пока не будет отображен шаблон, а результат попытки визуализации html-тела используется для принятия решения о создании HtmlEmail или SimpleEmail.Этот метод необходимо будет переписать, чтобы определить тип электронного письма перед отображением шаблона, и, если бы он был html, создать HtmlEmail и прикрепить встроенные изображения перед отображением шаблона, чтобы он мог передавать идентификаторы содержимогодля средства визуализации.

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

1 голос
/ 30 сентября 2013

Решением может быть визуализация HTML-контента вручную, а затем его отправка в электронную почту.Этот код работал для меня:

public static String test() throws EmailException, MalformedURLException {
  HtmlEmail email = new HtmlEmail();
  email.setHostName("smtp.server.com");
  email.setAuthentication("username", "pwd");

  email.setSubject("subject");
  email.addTo("to@example.com");
  email.setFrom("from@example.com");

  URL url = new URL("https://example.com/image.png");
  String cid = email.embed(url, "IMG1");

  Template templateHtml = TemplateLoader.load("/Mails/test.html");
  final Map<String, Object> templateHtmlBinding = new HashMap<String, Object>();
  templateHtmlBinding.put("cid", cid);
  String body = templateHtml.render(templateHtmlBinding);
  email.setHtmlMsg(body);

  return email.send();
}   
1 голос
/ 10 мая 2011

Это зависит от почтового клиента, который вы используете для чтения тестовой электронной почты.Большинство из них игнорируют или удаляют свойство css background-image.

Обратите внимание на следующее:

http://www.email -standards.org /

http://www.campaignmonitor.com/design-guidelines/

0 голосов
/ 17 мая 2016

Я немного опоздал с ответом, но это возможно и прекрасно интегрируется с учебником по MVC-Email.Предполагая, что ваш почтовый класс также notifiers.Mails, используйте его как шаблон HTML:

%{
    String logoSrc = notifiers.Mails.getEmbedddedSrc("public/images/logo.png", "cool logo");
}%
<html>
    <head>
    </head>
    <body>
        Look at this cool image! <br>
        <img src="${logoSrc}">
        <br>
        Amazing, no? 
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...