用 Java 下載電子郵件附件
- java
1. 概述
在本教程中,我們將了解如何使用 Java 下載電子郵件附件。為此,我們需要 JavaMail API 。 JavaMail API 可作為
依賴項或作為單獨的 jars 使用。
2. JavaMail API 概述
JavaMail API 用於撰寫、發送和接收來自電子郵件服務器(如 Gmail)的電子郵件。它為使用抽像類和接口的電子郵件系統提供了一個框架。 API 支持大多數 RFC822 和 MIME Internet 消息傳遞協議,如 SMTP、POP、IMAP、MIME 和 NNTP。
3. JavaMail API 設置
我們需要在 Java 項目中添加 javax.mail Maven 依賴項以使用 JavaMail API:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
4. 下載電子郵件附件
為了在 Java 中處理電子郵件,我們使用javax.mail
包中Message
類。 Message
實現了javax.mail.Part
接口。
Part
接口具有BodyPart
和屬性。帶有附件的內容是一個名為MultiPart
BodyPart
。如果電子郵件有任何附件,則它的處置等於“ Part.ATTACHMENT
”。如果沒有附件,則處置為null
。 Part
接口的getDisposition
方法為我們獲取處置。
我們看一個基於Maven的簡單項目,以了解下載電子郵件附件的工作方式。我們將專注於下載電子郵件並將附件保存到磁盤。
我們的項目有一個實用程序,可以處理下載電子郵件並將它們保存到我們的磁盤。我們還顯示附件列表。
要下載附件,我們首先檢查內容類型是否具有多部分內容。如果是,我們可以進一步處理以檢查零件是否有任何附件。為了檢查內容類型,我們寫:
if (contentType.contains("multipart")) {
//send to the download utility...
}
如果我們有一個多部分,我們首先檢查它是否屬於Part.ATTACHMENT
saveFile
方法將文件保存到我們的目標文件夾。因此,在下載實用程序中,我們將檢查:
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
String file = part.getFileName();
part.saveFile(downloadDirectory + File.separator + part.getFileName());
downloadedAttachments.add(file);
}
由於我們使用的是高於 1.4 的 JavaMail API 版本,因此我們可以使用Part
接口中saveFile
方法。 saveFile
方法適用於File
像或String
。我們在示例中使用了一個字符串。此步驟將附件保存到我們指定的文件夾中。我們還維護一個顯示附件列表。
在 JavaMail API 1.4 版之前,我們必須使用FileStream
和InputStream
逐字節寫入整個文件。在我們的示例中,我們為 Gmail 帳戶使用了 Pop3 服務器。因此,要調用示例中的方法,我們需要一個有效的 Gmail 用戶名和密碼以及一個用於下載附件的文件夾。
讓我們看看下載附件並將它們保存到磁盤的示例代碼:
public List<String> downloadAttachments(Message message) throws IOException, MessagingException {
List<String> downloadedAttachments = new ArrayList<String>();
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
String file = part.getFileName();
part.saveFile(downloadDirectory + File.separator + part.getFileName());
downloadedAttachments.add(file);
}
}
return downloadedAttachments;
}