gpt4 book ai didi

java - 如何序列化 Mimemessage 实例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:35 28 4
gpt4 key购买 nike

我一直在尝试序列化一个 MimeMessage 实例,但正如我在网上看到的那样,这是不可能的。我想通过序列化 MimeMessage 实例来实现的是,我想散列该实例并将其随邮件本身一起发送。到目前为止我编写的代码是这样的:

MimeMessage message = new MimeMessage(session);
//...setting up content of MimeMessage
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("object.ser")));
oos.writeObject(message);
oos.close();

它在 GlassFish 服务器上编译,但当我尝试使用服务时出现运行时错误。它说:

exception

java.io.NotSerializableException: javax.mail.internet.MimeMessage

我试过这样做;但它也没有用:

Object obj = new Object();
obj = (Object)message;
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("object.ser")));
oos.writeObject(obj);
oos.close();

有什么方法可以实现序列化 MimeMessage 实例或绕过并以其他方式破解它吗?

最佳答案

实际上,MimeMessage does not implement Serializable by design ,您可以扩展 MimeMessage 来执行此操作,但您不需要这样做,因为 MimeMessage 具有使用 writeTo(OutputStream) 的功能允许您将内容保存为 n RFC-822 mime 消息。

try (OutputStream str = Files.newOutputStream(Paths.get("message.eml"))) {
msg.writeTo(str);
}

然后您可以使用 MimeMessage(Session,InputStream) 读取此消息以供以后处理带有 session 对象的构造函数。

Session session = Session.getInstance(props);
try (InputStream str = Files.newInputStream(Paths.get("message.eml"))) {
MimeMessage msg = new MimeMessage(session, str);
// Do something with the message, maybe send it.
Transport.send(msg);
}

如果你恰好在使用 spring 的 JavaMailSender那么您还可以使用 createMimeMessage(InputStream) 通过已配置的 session 构建新的 MIME 消息它使用配置的 session 。

关于java - 如何序列化 Mimemessage 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609046/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com