- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
下面的程序显示了 HTML 多部分 MIME 类型的意外返回值。为什么这个程序打印的是 text/plain
而不是 text/html
?
public class Main {
public static void main(String[] args) throws javax.mail.MessagingException, java.io.IOException {
javax.mail.internet.MimeBodyPart mime_body_part = new javax.mail.internet.MimeBodyPart();
mime_body_part.setContent("<h1>foo</h1>", "text/html");
System.out.println(mime_body_part.getContentType());
}
}
我尝试了许多替代方法,包括设置一个包装在 DataHandler
中的 ByteArrayDataSource
,但无济于事。当我尝试使用 MimeMessage
而不是 MimeBodyPart
时,也会发生同样的事情。
在 Linux 上编译和运行:
javac -classpath .:activation.jar:mail.jar Main.java
java -classpath .:activation.jar:mail.jar Main
最佳答案
调用 MimeMessage.saveChanges()
在封闭的消息上,它将通过将 MIME 结构级联到对您的正文部分的 MimeBodyPart.updateHeaders()
的调用来更新 header 。正是这个 updateHeaders
调用将内容类型从 DataHandler
传输到部件的 MIME Content-Type
header 。
当您设置 MimeBodyPart
的内容时,JavaMail 在内部(并不明显)会创建一个 DataHandler
对象来包装您传入的对象。该部分的 Content -Type
header 不会立即更新。
在您的测试程序中没有直接的方法可以做到这一点,因为您没有包含 MimeMessage
并且 MimeBodyPart.updateHeaders()
不是 公开
.
这是一个说明预期和意外输出的工作示例:
public class MailTest {
public static void main( String[] args ) throws Exception {
Session mailSession = Session.getInstance( new Properties() );
Transport transport = mailSession.getTransport();
String text = "Hello, World";
String html = "<h1>" + text + "</h1>";
MimeMessage message = new MimeMessage( mailSession );
Multipart multipart = new MimeMultipart( "alternative" );
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText( text, "utf-8" );
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent( html, "text/html; charset=utf-8" );
multipart.addBodyPart( textPart );
multipart.addBodyPart( htmlPart );
message.setContent( multipart );
// Unexpected output.
System.out.println( "HTML = text/html : " + htmlPart.isMimeType( "text/html" ) );
System.out.println( "HTML Content Type: " + htmlPart.getContentType() );
// Required magic (violates principle of least astonishment).
message.saveChanges();
// Output now correct.
System.out.println( "TEXT = text/plain: " + textPart.isMimeType( "text/plain" ) );
System.out.println( "HTML = text/html : " + htmlPart.isMimeType( "text/html" ) );
System.out.println( "HTML Content Type: " + htmlPart.getContentType() );
System.out.println( "HTML Data Handler: " + htmlPart.getDataHandler().getContentType() );
}
}
关于java - 如何将 MimeBodyPart ContentType 设置为 "text/html"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5028670/
我使用 javax.mail.internet.MimeBody* 版本 1.4.1 我的程序想要使用 MimeMultiPart 将一些具有多层嵌套的二进制数据从服务器发送到客户端。我观察到,如果我
我必须发送一封在邮件正文中包含一个大字符串的电子邮件(不是作为附件),我可以从文件中读取该字符串。 我的问题是:如何通过流式传输在文本中设置大字符串? MimeBodyPart.setText(tex
我正在尝试发送带有附件的电子邮件,如此处所述 enter link description here但我的 eclipse 总是给我这个错误: 类型不匹配:无法从 MimeBodyPart 转换为 B
我正在尝试使用 JavaMail 发送包含嵌入/内联图像的 html 电子邮件(带有替代文本)。 我想看看格式正确的邮件是什么样子的,所以我使用带有内联图像的 gmail 发送了一封邮件,下面是原始来
我正在创建一个 BufferedImage我正在尝试将其包含在 MimeBodyPart 中 如下: BufferedImage img=generateQR(otp); messageBodyPar
我想将一些文件附加到我的电子邮件中,但出现此语法错误 if (attachedFiles != null && attachedFiles.size() > 0) { for
我们有代码可以发送到一个人的邮箱并将带有附件的电子邮件复制到文件系统。 复制消息和附件的代码对于大多数文件都可以正常工作,但长文件名会出现问题。 if (attachment instanceof F
我正在尝试获取 Mule ESB 中的 FROM 电子邮件地址。 我将检索到的对象作为 MimeBodyPart,我想改为使用 MimeMessage。这个怎么做? 欢迎使用 Mule 或 Java
下面的程序显示了 HTML 多部分 MIME 类型的意外返回值。为什么这个程序打印的是 text/plain 而不是 text/html? public class Main { public s
我想在向收件人发送电子邮件时包含附件。我已经能够设置和获取附件,但是当从 Javaxmail 调用 AttachFile 方法时,我收到错误。 此代码是使用 javax 库用 Java 编写的。 一切
我是一名优秀的程序员,十分优秀!