下面的程序显示了HTML多部分mime类型的意外返回值。为什么该程序打印“文本/纯文本”而不是“文本/ 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()
对您的身体部位的调用来更新标头。正是此updateHeaders
调用将内容类型从传输DataHandler
到了部分的MIME
Content-Type
标头。
当设置a的内容时MimeBodyPart
,JavaMail会在内部(并且不是很明显)创建一个DataHandler
对象,该对象包装了传入的对象。部件的Content- Type
头 不会 立即更新。
在您的测试程序中,没有直接的方法可以执行此操作,因为您没有包含MimeMessage
和MimeBodyPart.updateHeaders()
is
public
。
这是一个说明预期和意外输出的工作示例:
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() );
}
}
问题内容: 我尝试过这种方式,但是它没有改变吗? 问题答案: 最好使用.png文件;.ico是Windows特定的。最好不要使用文件,而是使用类资源(可以包装在应用程序的jar中)。 尽管您甚至可能考虑将setIconImages用于多种尺寸的图标。
我使用的是Spring Kafka 2.2.7,我已经将配置为,并使用消费消息,一切都按预期运行。 我想添加一个来记录所有消耗的消息,但发现很难配置它。留档指出可以在容器上设置RecordInterceptor,但我不确定如何获取容器的实例。 从版本2.2.7开始,您可以向侦听器容器添加RecordInterceptor;它将在调用允许检查或修改记录的侦听器之前被调用。 我查阅了Spring文档,
我是Sublime Text的新用户。我花了很多时间来弄清楚如何运行我的Python代码,它使用Tensorflow库。终端出现了一个错误,显示“重要性错误:没有名为ensorflow的模块”。但是我已经在几周前安装了Anaconda和tenorflow,它使用Gedit运行得很好。如何解决这个问题?
我将一个字符串设置为activeElement.value,一切正常。现在,我想为activeElement.value设置一个变量,我得到了以下错误代码: 线程“main”中的异常 org.openqa.selenium.WebDriver异常:未定义患者 ID 命令持续时间或超时:66 毫秒 构建信息:版本:“2.45.0”,修订版:“5017cb8”,时间:“2015-02-26 23:59
问题内容: 我想设置progressDialog的主题。要创建它,我使用以下代码: 我不能只是写 因为show()方法是静态的,并且我收到编译器警告。有没有办法使用可用的常量,例如 设置对话框主题? 我还想更改Dialog的背景并弄个圆角(我不想使用progressDialog内的progressBar进行任何更改。这里有许多教程,但是它们通常描述了如何创建扩展progressDialog类的新类
如何将样式仅设置为之一(而不是自定义)?我是否必须创建2个和一个自定义ImageView,因为我必须传递样式抛出它们的?