我们有一个要求,我们需要在电子邮件中嵌入图像,而不是在任何服务器上托管它,并在锚点中引用它的链接。
我遇到了#34; Contend-id"消息头中的概念,然后引用具有内容id的锚中的图像。它似乎在java邮件api中工作。但是我想对liferay的MailMessage做同样的事情。
但是没有选项可以在java的MailMessage bean中设置内容标题。
有没有办法实现这个目标? 我们不希望在任何必须嵌入电子邮件的服务器上托管图片,如附件。
答案 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);
}
}