1. 概要

このチュートリアルでは、Javaを使用して電子メールの添付ファイルをダウンロードする方法を見ていきます。 そのためには、JavaMailAPIが必要です。 JavaMail APIは、Maven依存関係または個別のjarとして使用できます。

2. JavaMailAPIの概要

JavaMail APIは、Gmailなどの電子メールサーバーから電子メールを作成、送信、および受信するために使用されます。 抽象クラスとインターフェースを使用する電子メールシステムのフレームワークを提供します。 APIは、SMTP、POP、IMAP、MIME、NNTPなどのほとんどのRFC822およびMIMEインターネットメッセージングプロトコルをサポートします。

3. JavaMailAPIセットアップ

JavaMail APIを使用するには、Javaプロジェクトに javax.mailMaven依存関係を追加する必要があります。

<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インターフェースを実装します。

パーツインターフェイスには、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以降のJavaMailAPIバージョンを使用しているため、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で入手できます。