Встраивание изображений в html почту с java почтой - PullRequest
15 голосов
/ 10 марта 2011

Я отправляю html и изображения с помощью javamail, но по какой-то причине я не вижу изображения как часть html, я вижу их только как вложение.Я не знаю, почему это так.Вот как это выглядит, когда один из моих пользователей получает электронное письмо: enter image description here

Я хотел бы также упомянуть, как выглядит HTML:

private String generateActivationLinkTemplate() {
    String htmlText = "";
htmlText ="<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">  <tr>    <td><img src=\"cid:logoimg\"/></td>  </tr>  <tr>    <td height=\"220\"> <p>Thanks for Joining Site.com</p>      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>    <p>Username:<br />      Password: </p>    <p>To confirm your email click <a href=\"#\">here</a>.</p></td>  </tr>  <tr>    <td height=\"50\" align=\"center\" valign=\"middle\" bgcolor=\"#CCCCCC\">www.site.com | contact@site.com | +38200 123 456</td>  </tr></table>";}

Нужно ли мнеhtml, body и head head ...?

Вот как выглядит реализация java:

@Stateless(name = "ejbs/EmailServiceEJB")
public class EmailServiceEJB implements IEmailServiceEJB {

@Resource(name = "mail/myMailSession")
private Session mailSession;

public void sendAccountActivationLinkToBuyer(String destinationEmail,
        String name) {

    // Destination of the email
    String to = destinationEmail;
    String from = "dontreply2thismessage@gmail.com";

    try {
        Message message = new MimeMessage(mailSession);
        // From: is our service
        message.setFrom(new InternetAddress(from));
        // To: destination given
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
        message.setSubject("Uspijesna registracija");
        // How to found at http://www.rgagnon.com/javadetails/java-0321.html
        message.setContent(generateActivationLinkTemplate(), "text/html");

        Date timeStamp = new Date();
        message.setSentDate(timeStamp);

        // Prepare a multipart HTML
        Multipart multipart = new MimeMultipart();
        // Prepare the HTML
        BodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(generateActivationLinkTemplate(), "text/html");

        // PREPARE THE IMAGE
        BodyPart imgPart = new MimeBodyPart();

        String fileName = "logoemailtemplate.png";

        ClassLoader classLoader = Thread.currentThread()
                .getContextClassLoader();
        if (classLoader == null) {
            classLoader = this.getClass().getClassLoader();
            if (classLoader == null) {
                System.out.println("IT IS NULL AGAIN!!!!");
            }
        }

        DataSource ds = new URLDataSource(classLoader.getResource(fileName));

        imgPart.setDataHandler(new DataHandler(ds));
        imgPart.setHeader("Content-ID", "logoimg");

        multipart.addBodyPart(imgPart);
        multipart.addBodyPart(htmlPart);            

        // Set the message content!
        message.setContent(multipart);

        Transport.send(message);

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }

}

Я думаю, что java-часть для меня выглядит хорошо, но яподозрительно только HTML-разметка, я что-то не так с этим?Я думаю, что тег img не работает должным образом и по какой-то причине изображение не появляется в электронном письме (обратите внимание, что оно отображается только в виде вложения):

<img src=\"cid:logoimg\"/>

Ответы [ 2 ]

9 голосов
/ 10 марта 2011

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

Также Content-ID должен быть уникальным во всем мире, вы не можете просто сказать «logoimg». Попробуйте logimg-randomnumbers-dontreply2thismessage@gmail.com. Это не может быть вашей проблемой, хотя.

8 голосов
/ 18 марта 2013

Ошибка из-за <img src=\"cid:logoimg\"/>

Там должно быть: imgPart.setHeader("Content-ID", "<logoimg>");

Не: imgPart.setHeader("Content-ID", "logoimg");

Т.е .: вам нужны '<' и '>'

...