序列化 Java 邮件

Serialization Java Mail

我正在编写基于 JakartaMail Java 库的邮件服务。需要接收消息的内容。为此,我使用 msg.getContent(),其中 returns 是 Object 类型。 详细研究了这个问题后,我得出结论,没有通用的方法来分解消息的内容。您只能检查属于其中一种类型。因此,序列化 Object 类型,which returns getContent method完全,问题是不可序列化。我会很感激你的帮助

blic Blob mapDtoToEntity(Message msg) throws Exception {

        Blob blob = new Blob();
        Object object = msg.getContent(); // получаем содержимое сообщения

        // создаем два потока baos - базовый класс для реализации выходного потока,
        // в котором данные записываются в массив байтов
        // ois - преобразует объекты в байты

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try (ObjectOutputStream ois = new ObjectOutputStream(baos)) {
            ois.writeObject(object);
            byte[] arrayByteObject = baos.toByteArray();
            blob.setObject(arrayByteObject);
        }
            baos.close(); //закрываем поток

            return blob;

    }}

Caused by: java.io.NotSerializableException: jakarta.mail.internet.MimeMultipart
    at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1197)
    at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
    at com.axsoft.mail.utils.impl.BlobMappingUtils.mapDtoToEntity(BlobMappingUtils.java:26)
    at com.axsoft.mail.services.Service.saveMessageRepos(Service.java:51)
    at com.axsoft.mail.MailApplication.run(MailApplication.java:26)
    a org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:767)

Class MimeMessage 有方法 writeTo(OutputStream) 可以让你写出整个信息,包括它的 headers。它有一个构造函数 MimeMessage(Session, InputStream),可让您从先前序列化的消息创建消息。

如果您不想保存整封邮件而只想保存其 body,您可以使用 getDataHandler().writeTo(outputStream)