1. 概述
在本教程中,我们将了解如何使用 Java 下载电子邮件附件。 为此,我们需要JavaMail API 。 JavaMail API 可以作为 Maven 依赖项或单独的 jar 提供。
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);
}
由于我们使用的 JavaMail API 版本高于 1.4,因此我们可以使用 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;
}
5. 结论
本文展示了如何使用本机 JavaMail 库在 Java 中下载电子邮件附件。本教程的完整代码可 在 GitHub 上获取。