Java-发送电子邮件:image/HTML和PDF附件
谢谢你阅读我的帖子 我需要自动发送包含以下内容的电子邮件:Java-发送电子邮件:image/HTML和PDF附件,java,html,image,email,attachment,Java,Html,Image,Email,Attachment,谢谢你阅读我的帖子 我需要自动发送包含以下内容的电子邮件: 公司标志(图像) HTML消息 PDF附件 我无法在电子邮件中正确显示图像,也无法通过电子邮件客户端“正确管理”PDF 案例1 (参见下面的代码)具有multipart=新的MimeMultipart(“混合”) PDF附件由电子邮件客户端正确管理: 电子邮件客户端中会出现一个小回形针,表示电子邮件有附件, PDF附件的大小也会出现, 等等 徽标不会正确显示在电子邮件的顶部(在HTML代码中),而是显示在电子邮件的末尾 案例2
- 公司标志(图像)
- HTML消息
- PDF附件
multipart=新的MimeMultipart(“混合”)代码>
- PDF附件由电子邮件客户端正确管理:
电子邮件客户端中会出现一个小回形针,表示电子邮件有附件,
PDF附件的大小也会出现,
等等
- 徽标不会正确显示在电子邮件的顶部(在HTML代码中),而是显示在电子邮件的末尾
案例2
(参见下面的代码)当multipart=new MimeMultipart(“相关”)代码>
这是相反的:
- 图像显示在电子邮件的顶部,它应该在那里
- 但是电子邮件客户端没有正确处理PDF附件(主窗口中没有回形针,“附件大小未知”,等等)
我经常收到包含徽标和PDF附件的电子邮件(和我们大多数人一样)
我注意到(在这些电子邮件的消息源中)通常有两部分:一部分是多部分/混合的,另一部分是多部分/相关的
我没有设法写的代码,标志和附件都妥善处理的电子邮件客户端
下面您可以找到我已经编写的代码
谢谢你的帮助和问候
public void send(String s_fromEmailAddress, String s_toEmailAddress, String s_messageSubject, String s_messageAttachmentFileName, String s_messageAttachmentFileNameToDisplay)
throws AddressException, MessagingException, IOException
{
Properties properties = null;
Session session = null;
Message message = null;
BodyPart messageBodyPart = null;
Multipart multipart = null;
DataSource fileDataSource = null;
String s_htmlText = null;
DataSource fds = null;
//------------------------------------------------------------------
// Get system properties.
//------------------------------------------------------------------
properties = System.getProperties();
//------------------------------------------------------------------
// Setup mail server.
//------------------------------------------------------------------
properties.setProperty("mail.smtp.host", "smtp.wanadoo.fr");
//------------------------------------------------------------------
// Get the default Session object.
//------------------------------------------------------------------
session = Session.getDefaultInstance(properties);
//------------------------------------------------------------------
// Define message.
//------------------------------------------------------------------
message = new MimeMessage(session);
message.setFrom(new InternetAddress(s_fromEmailAddress));
message.addRecipient(
Message.RecipientType.TO,
new InternetAddress(s_toEmailAddress));
message.setSubject(s_messageSubject);
//------------------------------------------------------------------
// Create the message part.
//------------------------------------------------------------------
multipart = new MimeMultipart("related");
//------------------------------------------------------------------
// HTML part
//------------------------------------------------------------------
s_htmlText =
"<html> \n"
+ " <head> \n"
+ " <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"> \n"
+ " </head> \n"
+ " <body> \n"
+ " <img width=\"100px\" \n"
+ " height=\"37px\" \n"
+ " style=\"margin-left: 1em;\" \n"
+ " src=\"cid:image\" \n"
+ " alt=\"LOGO\" />\n"
+ " <br /> \n"
+ ms_messageBodyPartText
+ " </body> \n"
+ "</html> ";
messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(s_htmlText, "text/html; charset=utf-8");
messageBodyPart.setHeader("Content-Transfer-Encoding", "8bit");
multipart.addBodyPart(messageBodyPart);
//------------------------------------------------------------------
// Logo (image)
//------------------------------------------------------------------
messageBodyPart = new MimeBodyPart();
fds = new FileDataSource("where_the_image_can_be_found//Logo1_25_p_cent.png");
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID", "<image>");
messageBodyPart.addHeader("Content-Type", "image/png");
multipart.addBodyPart(messageBodyPart);
//------------------------------------------------------------------
// This part is the attachment.
//------------------------------------------------------------------
if((s_messageAttachmentFileName != null)
&& (s_messageAttachmentFileNameToDisplay != null))
{
messageBodyPart = new MimeBodyPart();
fileDataSource = new FileDataSource(s_messageAttachmentFileName);
messageBodyPart.setDataHandler(new DataHandler(fileDataSource));
messageBodyPart.addHeader("Content-Type", "application/pdf");
messageBodyPart.setFileName(s_messageAttachmentFileNameToDisplay);
multipart.addBodyPart(messageBodyPart);
}
//------------------------------------------------------------------
// Put parts in message.
//------------------------------------------------------------------
message.setContent(multipart);
//------------------------------------------------------------------
// Send the message
//------------------------------------------------------------------
Transport.send(message);
}
public void send(字符串s_from emailaddress,字符串s_to emailaddress,字符串s_messageSubject,字符串s_messageAttachmentFileName,字符串s_messageAttachmentFileName to display)
抛出AddressException、MessaginException、IOException
{
Properties=null;
会话=空;
Message=null;
BodyPart messageBodyPart=null;
Multipart Multipart=null;
DataSource fileDataSource=null;
字符串s_htmlText=null;
数据源fds=null;
//------------------------------------------------------------------
//获取系统属性。
//------------------------------------------------------------------
properties=System.getProperties();
//------------------------------------------------------------------
//安装邮件服务器。
//------------------------------------------------------------------
setProperty(“mail.smtp.host”、“smtp.wanadoo.fr”);
//------------------------------------------------------------------
//获取默认会话对象。
//------------------------------------------------------------------
session=session.getDefaultInstance(属性);
//------------------------------------------------------------------
//定义消息。
//------------------------------------------------------------------
message=新mimessage(会话);
message.setFrom(新的InternetAddress(s_fromEmailAddress));
message.addRecipient(
Message.RecipientType.TO,
新的互联网地址(s_toEmailAddress));
message.setSubject(s_messageSubject);
//------------------------------------------------------------------
//创建消息部分。
//------------------------------------------------------------------
多部分=新的多部分(“相关”);
//------------------------------------------------------------------
//HTML部分
//------------------------------------------------------------------
s_htmlText=
“\n”
+“\n”
+“\n”
+“\n”
+“\n”
+“\n”
+“
\n”
+ms_messageBodyPartText
+“\n”
+ " ";
messageBodyPart=新的MimeBodyPart();
setContent(s_htmlText,“text/html;charset=utf-8”);
messageBodyPart.setHeader(“内容传输编码”、“8bit”);
multipart.addBodyPart(messageBodyPart);
//------------------------------------------------------------------
//标志(图像)
//------------------------------------------------------------------
messageBodyPart=新的MimeBodyPart();
fds=新文件数据源(“在哪里可以找到图像//Logo1\u 25\u p\u cent.png”);
setDataHandler(新的DataHandler(fds));
messageBodyPart.setHeader(“内容ID”,即“”);
messageBodyPart.addHeader(“内容类型”、“图像/png”);
multipart.addBodyPart(messageBodyPart);
//------------------------------------------------------------------
//这部分是附件。
//------------------------------------------------------------------
if((s_messageAttachmentFileName!=null)
&&(s_messageAttachmentFileNameToDisplay!=null))
{
messageBodyPart=新的MimeBodyPart();
fileDataSource=新的fileDataSource(s_messageAttachmentFileName);
setDataHandler(新的DataHandler(fileDataSource));
messageBodyPart.addHeader(“内容类型”、“应用程序/pdf”);
messageBodyPart.setFileName(s_messageattachmentfilename显示);
multipart.addBodyPart(messageBodyPart);
}
//------------------------------------------------------------------
//在消息中放置部件。
//------------------------------------------------------------------
message.setContent(多部分);
//------------------------------------------------------------------
//发送消息
//------------------------------------------------------------------
传输。发送(消息);
}
某些图像被邮件客户端阻止。您想用图像表代替吗?你好,彼得。谢谢你的工具。图像尺寸为142px 52px。我将“像素大小”设置为(1,1)。我将“表大小”设置为(142,52)。我选中了复选框“选中以获取所有颜色”。这真的不坏,但是