java - 将字符串转换为 javax 邮件消息对象

标签 java email jakarta-mail

我正在尝试从邮件字符串中获取附件。我认为最好的方法是获取原始字符串,将其转换为 javax 邮件消息,然后按照 this 进行操作。教程。我找不到一种方法来获取原始字符串并将其转换为 javax 邮件消息。附件部分的长度要长得多,但为了简单起见,我把它剪短了。

示例字符串:

X-DateCreated: 7/11/2014 8:12:53 PM (UTC)
X-Received: Secure delivery via Web Service
Thread-Topic: Test attachment
Date: Fri, 11 Jul 2014 16:12:53 -0400
Message-ID: <218685@CM>
thread-index: Ac+hJI371nbUghSdS9eoy8ESMrck3w==
From: <---->
To: <---->
Subject: Test attachment
MIME-Version: 1.0
Content-Type: multipart/mixed;
    boundary="----=_NextPart_000_55BE_01CFA103.0703D820"
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.2.9200.16384

This is a multi-part message in MIME format.

------=_NextPart_000_55BE_01CFA103.0703D820
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Test attachment.
------=_NextPart_000_55BE_01CFA103.0703D820
Content-Type: application/octet-stream;
    name="Copyright.docx"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="Copyright.docx"

UEsDBBQABgAIAAAAIQCR/hdIvQEAABcJAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADE
lk1P4zAQhu9I+x8iX1eNC4cVQk057MdxFwmQuLr2pPWuv2RPgf57xkkbIUibihLtJVIz877vY4+q
yez62ZriEWLS3lXsvJyyApz0Srtlxe7vfk0uWZFQOCWMd1CxDSR2Pf9yNrvbBEgFqV2q2AoxXHGe
5AqsSKUP4KhS+2gF0s+45EHIf2IJ/GI6/caldwgOJ5g92Hz2A2qxNlj8fKbXLUlwS1Z8b/tyVMW0
zfr8nvcq/gbolzSFfk0Ek95oRAhGS4FU549OvTnLZHuOkpRNT1rpkL5Sw56EXNkfsNX9oQFEraC4
ERF/C0td/MlHxZWXa0vK8rBND6evay2h02e3EL2ElGiy1pRdxQrtdvx9HHKd0NsHa7hGsDfRh3R+
Mk5nmv0goobuDvfehVvbBUSi//zL6KwHIRJuDKTPJ2h9h+MBkQRjAGydBxGeYHE7GsUr80GQ2nt0
HseYRmc9CAFOjcSwcx5EWIFQEE//T74jaI2PmsMo+a3xkfkX/zGf8sTCwBgEW+tBCKTFC+3z9Ek0
NociqbNZBLTI4weOvduhWT0JR22ALpGsTz4f5PWsQPVk8+azZv4CAAD//wMAUEsDBBQABgAIAAAA
IQAekRq37wAAAE4CAAALAAgCX3JlbHMvLnJlbHMgogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArJLBasMwDEDvg/2D0b1R2sEYo04v
Y9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZVDYq9Cdb5XsNb+7x4AJWF
vKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2kiKc/UYySzo55xVdf3mH4z
oJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop9SwabDAvJZyRYqwKGvC8
0ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wEAAP//AwBQSwMEFAAGAAgA
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

最佳答案

好吧,经过一段时间和迈克的回答,我想出了这个解决方案。下面的代码将获取一个字符串,将其转换为 javax Message 对象,然后解析它以提取各种字段并显示它们。希望这对其他人也有帮助!

代码:

try {
    InputStream is = new ByteArrayInputStream(receivedMessage.getBytes(StandardCharsets.UTF_8));
    MimeMessage mime = new MimeMessage(null, is);
    String finalMessage = "From: " + mime.getFrom()[0].toString() + "\n"
    + "To: " + mime.getRecipients(RecipientType.TO)[0] + "\n";
    for (int i = 1; i < mime.getRecipients(RecipientType.TO).length;i++)
        finalMessage = finalMessage + mime.getRecipients(RecipientType.TO)[i] + "\n";
    if (mime.getRecipients(RecipientType.CC) != null && mime.getRecipients(RecipientType.CC).length != 0) {
        finalMessage = finalMessage + "CC: " + mime.getRecipients(RecipientType.CC)[0] + "\n";
        for (int i = 1; i < mime.getRecipients(RecipientType.CC).length;i++)
            finalMessage = finalMessage + mime.getRecipients(RecipientType.CC)[i] + "\n";
    }
    if (mime.getRecipients(RecipientType.BCC)!= null && mime.getRecipients(RecipientType.BCC).length != 0) {
        finalMessage = finalMessage + "BCC: " + mime.getRecipients(RecipientType.BCC)[0] + "\n";
        for (int i = 1; i < mime.getRecipients(RecipientType.BCC).length;i++)
            finalMessage = finalMessage + mime.getRecipients(RecipientType.BCC)[i] + "\n";
    }
    finalMessage = finalMessage + "Subject: " + mime.getSubject() + "\n"
    + "Sent: " + mime.getSentDate() + "\n";
    if (mime.getReceivedDate() != null)
        finalMessage = finalMessage + "Received: " + mime.getReceivedDate() + "\n\n";
    else
        finalMessage = finalMessage + "\n";

    // suppose 'message' is an object of type Message
    String contentType = mime.getContentType();

    if (contentType.contains("multipart")) {
        // this message may contain attachment
        Multipart multiPart = (Multipart) mime.getContent();

        String attachments = "";
        String messageContent = "";

        for (int i = 0; i < multiPart.getCount(); i++) {
            MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
            if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
                // this part is attachment
                // code to save attachment...
                attachments = attachments + "Attachment: "+part.getFileName()+"\n"; //Turn this into a link the user can click to download
            }
            else {
                messageContent = messageContent + part.getContent().toString() + "\n";
            }
        }
        finalMessage = finalMessage + messageContent + "\n" + attachments;
    }
    message.setText(finalMessage);
} catch (Exception e4) {
    e4.printStackTrace();
}   

关于java - 将字符串转换为 javax 邮件消息对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788242/

相关文章:

asp.net - 如何提供不会被 Hotmail 删除的跟踪图像?

Java,无法在linux上发送邮件

java - Wildfly ContextService 并发 securityIdentity 为 null

email - 使用 node.js 在电子邮件中发送 IP 地址

email - 如何使用 Gmail API 和 Java 发送电子邮件

java - 在 Tomcat 上运行 JavaMail

java - 群发邮件失败 421 4.7.0 稍后再试

java - SpringBoot内嵌tomcat依赖

java - 并发修改异常的行为?迭代器内部是如何工作的。为什么在第二种情况下不会抛出异常

java - 为什么没有作业在hadoop上运行