拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 用Java 下载电子邮件附件

用Java 下载电子邮件附件

白鹭 - 2021-11-24 625 0 0

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 ”。如果没有附件,则处置为nullPart接口的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 版之前,我们必须使用FileStreamInputStream逐字节写入整个文件。在我们的示例中,我们为 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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *