图像在 java-mail 中被转换为 .bin 文件
Images are converted to .bin files in java-mail
我正在尝试使用 javamail API 发送具有 html 内容[包括图像] 的邮件,每当我尝试通过单元测试发送邮件时,它的工作方式都是例外的意思 html 内容已正确交付,但是当我在应用程序中使用相同的代码时 [When 运行 inside tomcat server] ,我将所有图像文件作为 bin 文件作为 ATT00005.bin &很快..
这是我的代码
public void sendMail(String userName, String test_name, String toaddress,
String ccaddress, String status, int total_marks, String msg,
String filepath) throws MessagingException, AddressException {
Properties props = System.getProperties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
Session session = Session.getInstance(props, null);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress ccaddressTo = new InternetAddress(ccaddress);
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toaddress));
MimeMultipart multipart = new MimeMultipart("related");
BodyPart messageBodyPart = new MimeBodyPart();
String temp1 = "<HTML><BODY><center><TABLE border=0><TR><TD ><img src=\"cid:image1\" border=0></TD>";
String temp2 = "</TR><TR><TD><table width=100% border=0><tr align=center><td><img src=\"cid:image2\" "
+ "border=0 width=340 height=32></td>";
String temp3 = "<tr ></tr ><td align=center>Awarded To </td><tr ></tr ><td align=center>"
+ userName
+ "</td><tr ></tr ><td align=center> <img src=\"cid:image3\" border=0 width=270 height=32> </td>";
String temp4 = "</tr> </tr > <td align=center>TEST CERTIFICATION PROGRAM </td> </tr><tr><td align=\"center\">Test name : "
+ test_name
+ "</td></tr></table></td></tr><TR><TD>"
+ "<img src=\"cid:image4\" border=0 ></TD></TR> </TABLE> </center> </body></HTML>";
String htmlText = temp1 + temp2 + temp3 + temp4;
messageBodyPart.setContent(htmlText, "text/html; charset=utf-8");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds1 = new FileDataSource(filepath + "b1.jpg");
messageBodyPart.setDataHandler(new DataHandler(fds1));
messageBodyPart.setHeader("Content-ID", "<image1>");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds2 = new FileDataSource(filepath + "cert.gif");
messageBodyPart.setDataHandler(new DataHandler(fds2));
messageBodyPart.setHeader("Content-ID", "<image2>");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds3 = new FileDataSource(filepath + "cer2.gif");
messageBodyPart.setDataHandler(new DataHandler(fds3));
messageBodyPart.setHeader("Content-ID", "<image3>");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds4 = new FileDataSource(filepath + "b3.jpg");
messageBodyPart.setDataHandler(new DataHandler(fds4));
messageBodyPart.setHeader("Content-ID", "<image4>");
multipart.addBodyPart(messageBodyPart);
} else {
BodyPart messageBodyPart = new MimeBodyPart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart.setText("Hello " + userName + ",\n" + msg);
}
message.setContent(multipart);
// Send the message
Transport transport = session.getTransport("smtp");
transport.connect(SMTP_HOST_NAME, null, null);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
我知道有些人在这里问过同样的问题 .zip file gets converted to .bin file while sending the email in java。但是我的问题是相同的代码在使用 junit [或在具有 main 方法的应用程序中] 时有效,但在应用程序在 tomcat 服务器上 运行 时却无效。我做错了什么。提前致谢...
您应该指定一个名称,如果您不希望系统自动提供一个:
messageBodyPart = new MimeBodyPart();
DataSource fds1 = new FileDataSource(filepath + "b1.jpg");
messageBodyPart.setDataHandler(new DataHandler(fds1));
messageBodyPart.setHeader("Content-ID", "<image1>");
messageBodyPart.setFileName(filepath + "b1.jpg"); // <= HERE
multipart.addBodyPart(messageBodyPart);
当您在 messageBodyPart
中设置 dataHandler
时,您只告诉 javamail 机器您要发送的字节在哪里。或者更确切地说,这只是 javamail 理解的内容。但是 messageBodyPart
中还有另一个字段:fileName
。对于javamail,原始名称和邮件中使用的名称完全无关,这可能是我们第一次使用它时脑部受伤的根源......
我正在尝试使用 javamail API 发送具有 html 内容[包括图像] 的邮件,每当我尝试通过单元测试发送邮件时,它的工作方式都是例外的意思 html 内容已正确交付,但是当我在应用程序中使用相同的代码时 [When 运行 inside tomcat server] ,我将所有图像文件作为 bin 文件作为 ATT00005.bin &很快.. 这是我的代码
public void sendMail(String userName, String test_name, String toaddress,
String ccaddress, String status, int total_marks, String msg,
String filepath) throws MessagingException, AddressException {
Properties props = System.getProperties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
Session session = Session.getInstance(props, null);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress ccaddressTo = new InternetAddress(ccaddress);
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toaddress));
MimeMultipart multipart = new MimeMultipart("related");
BodyPart messageBodyPart = new MimeBodyPart();
String temp1 = "<HTML><BODY><center><TABLE border=0><TR><TD ><img src=\"cid:image1\" border=0></TD>";
String temp2 = "</TR><TR><TD><table width=100% border=0><tr align=center><td><img src=\"cid:image2\" "
+ "border=0 width=340 height=32></td>";
String temp3 = "<tr ></tr ><td align=center>Awarded To </td><tr ></tr ><td align=center>"
+ userName
+ "</td><tr ></tr ><td align=center> <img src=\"cid:image3\" border=0 width=270 height=32> </td>";
String temp4 = "</tr> </tr > <td align=center>TEST CERTIFICATION PROGRAM </td> </tr><tr><td align=\"center\">Test name : "
+ test_name
+ "</td></tr></table></td></tr><TR><TD>"
+ "<img src=\"cid:image4\" border=0 ></TD></TR> </TABLE> </center> </body></HTML>";
String htmlText = temp1 + temp2 + temp3 + temp4;
messageBodyPart.setContent(htmlText, "text/html; charset=utf-8");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds1 = new FileDataSource(filepath + "b1.jpg");
messageBodyPart.setDataHandler(new DataHandler(fds1));
messageBodyPart.setHeader("Content-ID", "<image1>");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds2 = new FileDataSource(filepath + "cert.gif");
messageBodyPart.setDataHandler(new DataHandler(fds2));
messageBodyPart.setHeader("Content-ID", "<image2>");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds3 = new FileDataSource(filepath + "cer2.gif");
messageBodyPart.setDataHandler(new DataHandler(fds3));
messageBodyPart.setHeader("Content-ID", "<image3>");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource fds4 = new FileDataSource(filepath + "b3.jpg");
messageBodyPart.setDataHandler(new DataHandler(fds4));
messageBodyPart.setHeader("Content-ID", "<image4>");
multipart.addBodyPart(messageBodyPart);
} else {
BodyPart messageBodyPart = new MimeBodyPart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart.setText("Hello " + userName + ",\n" + msg);
}
message.setContent(multipart);
// Send the message
Transport transport = session.getTransport("smtp");
transport.connect(SMTP_HOST_NAME, null, null);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
我知道有些人在这里问过同样的问题 .zip file gets converted to .bin file while sending the email in java。但是我的问题是相同的代码在使用 junit [或在具有 main 方法的应用程序中] 时有效,但在应用程序在 tomcat 服务器上 运行 时却无效。我做错了什么。提前致谢...
您应该指定一个名称,如果您不希望系统自动提供一个:
messageBodyPart = new MimeBodyPart();
DataSource fds1 = new FileDataSource(filepath + "b1.jpg");
messageBodyPart.setDataHandler(new DataHandler(fds1));
messageBodyPart.setHeader("Content-ID", "<image1>");
messageBodyPart.setFileName(filepath + "b1.jpg"); // <= HERE
multipart.addBodyPart(messageBodyPart);
当您在 messageBodyPart
中设置 dataHandler
时,您只告诉 javamail 机器您要发送的字节在哪里。或者更确切地说,这只是 javamail 理解的内容。但是 messageBodyPart
中还有另一个字段:fileName
。对于javamail,原始名称和邮件中使用的名称完全无关,这可能是我们第一次使用它时脑部受伤的根源......