2014-07-16 34 views
3

我试图从邮件消息字符串中获取附件。我假设这样做的最好方法是取原始字符串,将其转换为javax邮件消息,然后按照this教程。我找不到一种方法来获取原始字符串并将其转换为javax邮件消息。附件部分时间更长,但为了简单起见,我将其缩短。将字符串转换为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: <[email protected]> 
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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 

回答

1

这里有一个example从文件中读取消息时,它可能是在建立的MimeMessage有用的,从字符串,而不是从该示例中的文件创建一个InputStream。

InputStream stream = new ByteArrayInputStream(mailString.getBytes(StandardCharsets.UTF_8)); 

OR

您可能能够创建一个DataHandler对象见本SO thread

,然后创建一个MimeMessage,并调用它的setContent方法用的DataHandler。

2

好了一段时间后,迈克的答案我已经想出了这个解决方案。下面的代码将采用一个字符串,将其转换为一个javax消息对象,然后解析它以提取各个字段并显示它们。希望这可以帮助别人!

CODE:

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(); 
}