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;
}
0 评论