Java邮件 - 附件&&内嵌图像 [英] Java mail - attachments && inline images
问题描述
今天早上我遇到了问题:
Java Mail ,发送多个附件无法使用
I had a problem solved already this morning: Java Mail, sending multiple attachments not working
这次我有一个稍微复杂的问题:我想将附加文件与图像组合在一起。
This time I have a slightly more complicated problem: I would like to combine attached files with images.
import java.io.IOException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class MailTest
{
public static void main(String[] args) throws AddressException, MessagingException, IOException
{
String host = "***";
String from = "***";
String to = "***";
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
// Get session
Session session = Session.getDefaultInstance(props, null);
// Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Hello JavaMail");
// Handle attachment 1
MimeBodyPart messageBodyPart1 = new MimeBodyPart();
messageBodyPart1.attachFile("c:/Temp/a.txt");
// Handle attachment 2
MimeBodyPart messageBodyPart2 = new MimeBodyPart();
messageBodyPart2.attachFile("c:/Temp/b.txt");
FileDataSource fileDs = new FileDataSource("c:/Temp/gti.jpeg");
MimeBodyPart imageBodypart = new MimeBodyPart();
imageBodypart.setDataHandler(new DataHandler(fileDs));
imageBodypart.setHeader("Content-ID", "<myimg>");
imageBodypart.setDisposition(MimeBodyPart.INLINE);
// Handle text
String body = "<html><body>Elotte<img src=\"cid:myimg\" width=\"600\" height=\"90\" alt=\"myimg\" />Utana</body></html>";
MimeBodyPart textPart = new MimeBodyPart();
textPart.setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
textPart.setContent(body, "text/html; charset=utf-8");
MimeMultipart multipart = new MimeMultipart("mixed");
multipart.addBodyPart(textPart);
multipart.addBodyPart(imageBodypart);
multipart.addBodyPart(messageBodyPart1);
multipart.addBodyPart(messageBodyPart2);
message.setContent(multipart);
// Send message
Transport.send(message);
}
}
当我在Gmail中打开电子邮件时,一切都很好:我有两个附件,图像显示在邮件的内容中(在img标签中)。
When I open the email in Gmail everything is fine: I have the two attachments, and the image is displayed in the content of the mail (in the img tag).
问题在于Thunderbird和RoundCubic网络邮件:每个显示的图片都缺失,并在底部显示为附件。
The problem is with Thunderbird and with RoundCubic webmail: each one showing like the image is missing and displaying it in the bottom as attachment.
我怎样才能使这项工作?
How can I make this work?
推荐答案
相当方便的是使用ImageHtmlEmail来自< a href =http://commons.apache.org/email/ =nofollow> org.apache.commons.mail库。 (更新:它仅包含在1.3的快照中)例如:
Quite convient is also the use of ImageHtmlEmail from the org.apache.commons.mail library. (UPDATE: it is only included in the snapshot of 1.3) For example:
HtmlEmail email = new ImageHtmlEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test email with inline image");
// embed the image and get the content id
URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
String cid = email.embed(url, "Apache logo");
// set the html message
email.setHtmlMsg(htmlEmailTemplate, new File("").toURI().toURL(), false);
这篇关于Java邮件 - 附件&&内嵌图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!