使用java邮件将图像嵌入到html电子邮件中

时间:2021-05-31 18:12:33

I am sending html and images with javamail but for some reason I don't see the images as part of the html, I see them only as an attachment. I don't know why is that. This is how it looks like when one of my users receive an email: 使用java邮件将图像嵌入到html电子邮件中

我用javamail发送html和图像但由于某种原因我没有看到图像作为html的一部分,我只把它们视为附件。我不知道为什么会这样。这是我的一个用户收到电子邮件时的样子:

I would like to mention also that is how the html looks like:

我还想提一下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>";}

Do I need an html,body, and a head tag...?

我需要一个html,正文和头标......?

This is how the java implementation looks like:

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

}

I think the java part to me looks fine, but i am suspicious only is the html markup, i there something wrong with it? I think that the img tag is not working properly and for not reason the image dont appear on the email(Notice it only appears down as an attachment):

我认为java部分给我看起来很好,但我只是怀疑是html标记,我有什么问题吗?我认为img标签工作不正常,并且没有理由图像不会出现在电子邮件中(注意它只显示为附件):

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

2 个解决方案

#1


9  

Have you checked the content-type is correct and the image content-disposition is set to inline?

您是否检查过内容类型是否正确并且图像内容处置是否设置为内联?

Also Content-ID needs to be globally unique, you can't just say "logoimg". Try logimg-randomnumbers-dontreply2thismessage@gmail.com. That may not be your problem though.

Content-ID也必须是全球唯一的,你不能只说“logoimg”。尝试logimg-randomnumbers-dontreply2thismessage@gmail.com。这可能不是你的问题。

#2


7  

The error is because of <img src=\"cid:logoimg\"/>

错误是因为使用java邮件将图像嵌入到html电子邮件中

There should be: imgPart.setHeader("Content-ID", "<logoimg>");

应该有:imgPart.setHeader(“Content-ID”,“ ”);

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

不是:imgPart.setHeader(“Content-ID”,“logoimg”);

Ie: You need the '<' and '>'

即:你需要'<'和'>'

#1


9  

Have you checked the content-type is correct and the image content-disposition is set to inline?

您是否检查过内容类型是否正确并且图像内容处置是否设置为内联?

Also Content-ID needs to be globally unique, you can't just say "logoimg". Try logimg-randomnumbers-dontreply2thismessage@gmail.com. That may not be your problem though.

Content-ID也必须是全球唯一的,你不能只说“logoimg”。尝试logimg-randomnumbers-dontreply2thismessage@gmail.com。这可能不是你的问题。

#2


7  

The error is because of <img src=\"cid:logoimg\"/>

错误是因为使用java邮件将图像嵌入到html电子邮件中

There should be: imgPart.setHeader("Content-ID", "<logoimg>");

应该有:imgPart.setHeader(“Content-ID”,“ ”);

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

不是:imgPart.setHeader(“Content-ID”,“logoimg”);

Ie: You need the '<' and '>'

即:你需要'<'和'>'