Подтвердить что ты не робот

Встраивание изображений в электронную почту html с помощью java-почты

Я отправляю 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 | [email protected] | +38200 123 456</td>  </tr></table>";}

Мне нужен html, body и head tag...?

Вот как выглядит реализация 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 = "[email protected]";

    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\"/>
4b9b3361

Ответ 1

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

И Content-ID должен быть глобально уникальным, вы не можете просто сказать "logoimg". Попробуйте [email protected]. Это может быть не ваша проблема.

Ответ 2

Ошибка связана с <img src=\"cid:logoimg\"/>

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

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

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