如何在liferay电子邮件中嵌入图像?

时间:2017-11-02 18:39:35

标签: email liferay-6 email-attachments liferay-7

我们有一个要求,我们需要在电子邮件中嵌入图像,而不是在任何服务器上托管它,并在锚点中引用它的链接。

我遇到了#34; Contend-id"消息头中的概念,然后引用具有内容id的锚中的图像。它似乎在java邮件api中工作。但是我想对liferay的MailMessage做同样的事情。

但是没有选项可以在java的MailMessage bean中设置内容标题。

有没有办法实现这个目标? 我们不希望在任何必须嵌入电子邮件的服务器上托管图片,如附件。

1 个答案:

答案 0 :(得分:0)

import com.liferay.mail.kernel.service.MailServiceUtil;


public void sendMailWithAttachment() {


    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content- handler=com.sun.mail.handlers.message_rfc822");

    try {


        Transport transport = MailServiceUtil.getSession().getTransport();

        Message message = new MimeMessage(MailServiceUtil.getSession());
        message.setFrom(new InternetAddress("no-reply@test.com"));
        message.setSubject("send email with Java");
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("joe@test.com"));

        MimeMultipart multipart = new MimeMultipart("related");
        BodyPart messageBodyPart = new MimeBodyPart();

        String htmlText = "<H1>Hello</H1><img src=\"cid:image\">";
        messageBodyPart.setContent(htmlText, "text/html");
        multipart.addBodyPart(messageBodyPart);


        messageBodyPart = new MimeBodyPart();
        DataSource fds = new FileDataSource
                ("D:\\temp\\image\\newJob.jpg");
        messageBodyPart.setDataHandler(new DataHandler(fds));
        messageBodyPart.setHeader("Content-ID","<image>");
        multipart.addBodyPart(messageBodyPart);

        // put everything together
        message.setContent(multipart);
        transport.connect();
        transport.sendMessage(message,
                message.getRecipients(Message.RecipientType.TO));
        transport.close();

        System.out.println("Send mail using Java ");
    } catch (Exception e) {
        logger.error(e);
    }
}