Java 爪哇邮件-附件及&;内联图像
今天早上我已经解决了一个问题: 这一次我有一个稍微复杂一点的问题:我想把附加文件和图像结合起来Java 爪哇邮件-附件及&;内联图像,java,jakarta-mail,Java,Jakarta Mail,今天早上我已经解决了一个问题: 这一次我有一个稍微复杂一点的问题:我想把附加文件和图像结合起来 import java.io.IOException; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; i
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);
}
}
import java.io.IOException;
导入java.util.Properties;
导入javax.activation.DataHandler;
导入javax.activation.FileDataSource;
导入javax.mail.Message;
导入javax.mail.MessaginException;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.AddressException;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.MimeBodyPart;
导入javax.mail.internet.mimessage;
导入javax.mail.internet.MimeMultipart;
公共类邮件测试
{
公共静态void main(字符串[]args)引发AddressException、MessaginException、IOException
{
字符串host=“***”;
字符串from=“***”;
字符串至=“***”;
//获取系统属性
Properties props=System.getProperties();
//安装邮件服务器
props.put(“mail.smtp.host”,host);
//获取会话
Session Session=Session.getDefaultInstance(props,null);
//定义消息
MimeMessage message=新MimeMessage(会话);
message.setFrom(新的InternetAddress(from));
message.addRecipient(message.RecipientType.TO,新Internet地址(TO));
message.setSubject(“Hello JavaMail”);
//手柄附件1
MimeBodyPart消息BodyPart1=新的MimeBodyPart();
messageBodyPart1.attachFile(“c:/Temp/a.txt”);
//手柄附件2
MimeBodyPart消息BodyPart2=新的MimeBodyPart();
messageBodyPart2.attachFile(“c:/Temp/b.txt”);
FileDataSource fileDs=新的FileDataSource(“c:/Temp/gti.jpeg”);
MimeBodyPart imageBodypart=新MimeBodyPart();
setDataHandler(新的DataHandler(fileDs));
setHeader(“内容ID”,即“”);
imageBodypart.setDisposition(MimeBodyPart.INLINE);
//处理文本
字符串体=“ElotteUtana”;
MimeBodyPart textPart=新的MimeBodyPart();
setHeader(“内容类型”,“文本/普通;字符集=\“utf-8\”);
setContent(body,“text/html;charset=utf-8”);
MimeMultipart multipart=新的MimeMultipart(“混合”);
multipart.addBodyPart(文本部分);
多部分添加BodyPart(imageBodypart);
multipart.addBodyPart(messageBodyPart1);
multipart.addBodyPart(messageBodyPart2);
message.setContent(多部分);
//发送消息
传输。发送(消息);
}
}
当我在Gmail中打开电子邮件时,一切正常:我有两个附件,图像显示在邮件内容中(在img标签中)
问题在于Thunderbird和RoundCubic webmail:每一个都显示为图像丢失,并在底部显示为附件
我怎样才能做到这一点呢?所以我通过让javamail去使用spring包装器来解决这个问题: 我不知道它在后台有什么魔力,但它很管用
谢谢大家 使用来自的ImageHtmlEmail也非常方便。(更新:仅包含在1.3的快照中)例如:
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);
Microsoft Outlook 2010不再允许内联图像!这对你来说是个大问题吗?我不是用Outlook而是用Thunderbird。在我将multipart从“related”更改为“mixed”之前,它正在工作。请。请看链接的stackoverflow问题。所以我用这个来解决这个问题:Spring在后台做这个把戏。但是我不能结束这个问题,因为我的代表不够高。