2013-02-04 36 views
1

我有一個客戶端程序(使用javax API),它將從電子郵件下載附件。不幸的是,它們無法從特定的發件人下載。使用JAVAX api下載電子郵件附件

下面是客戶端代碼,這將附件保存到本地磁盤:

String disp = p.getDisposition(); 
String contentType = part.getContentType(); 
if (disposition == null) { 
if ((contentType.length() >= 10) && (contentType.toLowerCase().substring(0, 10).equals("text/plain"))) { 
    //handle plain text 
} else { 
    part.writeTo(System.out); 
} 
} else if (disposition.equalsIgnoreCase(Part.ATTACHMENT)) { 
saveFile(part.getFileName(), part.getInputStream()); 
} else if (disposition.equalsIgnoreCase(Part.INLINE)) { 
saveFile(part.getFileName(), part.getInputStream()); 
} else { // Should never happen 
// handle else block 
} 

請給我建議的方式來下載附件..

下面是我的電子郵件發現,我無法下載附件:

  • 'disp'is null。內容類型爲消息/ rfc822

下面是part.writeTo(的System.out)輸出:

MIME-Version: 1.0 
Content-Type: message/rfc822 

Received: from XXXXXX with ESMTP id XXXXXXX ;   Tue, 29 Jan 2013 13:53:39 -0500 
From: [email protected] 
To: [email protected] 
Subject: XXXXXXX 
Date: Tue, 29 Jan 2013 13:53:40 -0500 
Message-ID: <[email protected]> 
X-Priority: 1 (High) 
Return-Receipt-To: <[email protected]> 
Disposition-Notification-To: <[email protected]> 
MIME-Version: 1.0 
X-MIMETrack: Itemize by SMTP Server on XXXXXXX/XXXXXX(Release 8.5.1FP1|January 05, 2010) at 01/29/2013 01:53:39 PM 
X-Disclaimed: 56875 
Content-Type: multipart/mixed; boundary="----=_NextPart_145_1257127098" 


------=_NextPart_145_1257127098 
Content-Type: application/pdf; name="attach1.pdf"; charset="iso-8859-1" 
Content-Disposition: attachment; filename="attach1.pdf" 
Content-Transfer-Encoding: base64 

D1//AAVP/wCR8194f27kn/Q4yv8A8OGE/wDl3mvvIiCv3Qeevf6etAGcEgggjJPfFS7H/ut/3yf8 
KNj/AN1v++T/AIUfVsT/ANA9f/wVP/5HzX3h/buSf9DjK/8Aw4YT/wCXea+8bSE4/P8AKn7H/ut/ 
3yf8KNjf3G/75P8AhR9WxP8A0D1//BU//kfNfeH9u5J/0OMr/wDDhhP/AJd5r7xmen480uPb/P8A 
kU7Y39xv++T/AIUbH/ut/wB8n/Cj6tif+gev/wCCp/8AyPmvvD+3ck/6HGV/+HDCf/LvNfeNpMjp 
kZp+x/7rf98n/Ck2N12HP+6f8KPq2J/6B6//AIKn/wDI+a+8P7dyT/ocZX/4cMJ/8u8194maQkgc 
/wCP0f8ADtL9m/8A6F+D/wAAY/8A4/RRQFl2/rT/ACQf8O0v2b/+hfg/8AY//j9H/DtL9m//AKF+ 
D/wBj/8Aj9FFAWXb+tP8kH/DtL9m/wD6F+D/AMAY/wD4/R/w7S/Zv/6F+D/wBj/+P0UUBZdv60/y 
Pg0Kc3RhcnR4cmVmDQoyNjY5Mg0KJSVFT0Y= 


------=_NextPart_145_1257127098 
Content-Type: application/pdf; name="attach-2.pdf"; charset="iso-8859-1" 
Content-Disposition: attachment; filename="attach-2.pdf" 
Content-Transfer-Encoding: base64 

NBclCFEsQwtbRDmKbBROiSFXwAJrKJhPUAtYIG1qQGYhi2QojkKW7DAxMjXAkRaNTU1wpEUUGZQk 
h2IabhnM1Ag00YieOXCQeNsQmNSx6DO21IOI4sqFyPowXA8PSAzXIwcxUn5DcwUOmaGXFY2BCkEc 
jLyoAuKSmxeRTMWRGYGuQHM4MSKDJlUamVtiT5VmcOYwzY0mKFXVCCmEiIhurIUQij5U1yMHJKrr 
0YIYUdSguwKHzNArhAyAZbk5tkKI7AIIycRhWgDh0GdkoQdRN1xzIg59w74AshiR5S7hVI693DU1 
1DPGUrrmogYkin3oQYxUuiKbhltmyJW7RqZGcL+glbsGBqZGZJa9yKbiKHvJDhVDEyMcqdLIxAxH 
qkSRQUl7KKbhlsFMlUATjeiZGQeJtw3M9Yyx6DO21IOI4sqMyPowXA8PSAzXIwcxUpZDcwUOmaGX 
GY0s9QxAHIzMqGKuZ25CbmZEMhVHZgS6As3hxIgMmlRpaA4sgrGlSjM4c5jmRjOU6mqEFEJERDfW 
QghFH6rrkQMS1fVoQYwoatBdgUNm6BVCBoZ6ZubYCiEzcgsgJBOHaQGEQ5+RhR5E3XDNiTj0DfsC 
NQ0KL0luZm8gMSAwIFINCi9Sb290IDIgMCBSDQo+Pg0Kc3RhcnR4cmVmDQo0ODYzMA0KJSVFT0Y= 


------=_NextPart_145_1257127098 
Content-Transfer-Encoding: quoted-printable 
Content-Type: text/plain; charset="iso-8859-1" 

Dear XXXXXX, 

Please see attached for your most recent attachments. Please direct correspond= 
ence and inquiries to [email protected] 
=20 
Thank you for your continued support, we appreciate it very much. 
=20 
=20 
Sincerely, 
=20 
XXXXX, XXX. 

------=_NextPart_145_1257127098-- 

回答

1

我得到了解決辦法我的問題。

當處置爲空且Content-type爲'MESSAGE/XXXX'時,將其視爲新消息並遍歷其內容。

else if(disp == null && StringUtils.isNotBlank(contentType) && contentType.toLowerCase().substring(0, 7).equals("message")) { 
    IMAPNestedMessage msg = (IMAPNestedMessage) p.getContent(); 
    Part p2 = (Part) msg; 
    Multipart mp = (Multipart) p2.getContent(); 
    int count = mp.getCount(); 
    for (int i = 0; i < count; i++){ 
     addAttachment(mp.getBodyPart(i), fileNames, fileName); 
    } 
}