LoginSignup
3
2

[Gmail API] JavaでGmail APIを使う

Last updated at Posted at 2024-03-15

Googleが提供しているGmail APIをJavaで使ってみました。

Gmail APIとは
Googleが提供しているAPIで、Gmailに関する操作ができます。

Gmail APIの利用料金は無料です。
ただし、1秒あたり250クォータの制限があります。
クォータの単位は、実行するGmailAPIの種類により決められます。
詳細はGoogleの公式ドキュメントをご覧ください。
⧉APIの使用制限

No 目次
1 Gmail APIを使用するための準備
1 プロジェクトの作成
2 Gmail APIの設定
3 APIを使用するためのキー取得
2 Gmail APIを使ってみる
1 googleライブラリの読み込み
2 Gmailインスタンスを取得
1 サービスアカウントを利用する場合
2 OAuth 2.0 クライアントIDを利用する場合
3 プログラムの実行
3 いろいろとAPIを叩いてみる
1 v1.users
2 v1.users.drafts
3 v1.users.history
4 v1.users.labels
5 v1.users.messages
6 v1.users.messages.attachments
7 v1.users.settings
8 v1.users.settings.cse.identities
9 v1.users.settings.cse.keypairs
10 v1.users.settings.delegates
11 v1.users.settings.filters
12 v1.users.settings.forwardingAddresses
13 v1.users.settings.sendAs
14 v1.users.settings.sendAs.smimeInfo
15 v1.users.threads

1. Gmail APIを使用するための準備

設定は下記から行います。
⧉Google クラウド プラットフォーム

やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Gmail APIの有効化
3.プログラムで使用するJSONファイルのダウンロード

最後の3.は、サービスアカウントかOAuth2.0を利用する2つの方法があります。

サービスアカウントを利用する場合は、
Google Workspaceにてドメイン全体の委任の設定を行う必要があります。

詳細はGoogle公式ドキュメントの
⧉Google Workspace ドメイン全体の権限の委任を行う
を参照ください。

なお、個人でAPIを試すには「Google Workspace」のアカウントが必要となり
いろいろとハードルが上がるので、OAuth2.0を利用する方をお勧めします。

1.1. プロジェクトの作成

まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)

1.2. Gmail APIの設定

Gmail APIを使えるようにします。

1. メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。
2. Gmail と入力して「Gmail API」を検索します。
3. 「有効にする」ボタンを押して「Gmail API」を使用可能にします。

1.3. APIを使用するためのキー取得

プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。

同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う

2. Gmail APIを使ってみる

2.1. googleライブラリの読み込み

Gmail APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。

<dependencies>
....
    <dependency>
        <groupId>com.google.auth</groupId>
        <artifactId>google-auth-library-oauth2-http</artifactId>
	</dependency>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-gmail</artifactId>
      <version>v1-rev20231218-2.0.0</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>libraries-bom</artifactId>
            <version>26.31.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2. Gmailインスタンスを取得

2.2.1. サービスアカウントを利用する場合

コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。

サービスアカウントによるGmail APIの利用は、ドメイン全体の委任の設定が必須になります。
ドメイン全体の委任の設定は、「Google Workspace」のアカウントが必要になります。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。

private static Gmail getGmail() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(InputStream input = new FileInputStream("JSONファイルのパス")){
        GoogleCredentials credentials = GoogleCredentials
                .fromStream(input)
                .createScoped( Arrays.asList("スコープ"));
        
        return new Gmail.Builder(transport, jsonFactory, new HttpCredentialsAdapter(credentials)).build();
    }
}

2.2.2. OAuth 2.0 クライアントIDを利用する場合

コード中の「JSONファイルのパス」は、
1.3.2. OAuth2.0 クライアントIDで取得したJSONファイルのパスを指定してください。

コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
途中でスコープを変更した場合は再度のOAuth同意が必要になるので
「認証情報を保存するフォルダパス」にあるファイルを削除するか、パスを変えてください。

private static Gmail getGmail() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(Reader reader = new InputStreamReader(new FileInputStream("JSONファイルのパス"))){
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory,reader);

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                transport, jsonFactory, clientSecrets, 
                Arrays.asList("スコープ"))
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("認証情報を保存するフォルダパス")))
            .build();
        
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
        Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
        
        return new Gmail.Builder(transport, jsonFactory, credential).build();
    }
}

2.3. プログラムの実行

プログラムを動かします。
サンプルではメールボックス内のメッセージ一覧を取得しています。

本文中の引数にある「メールアドレス」の指定は、
OAuth 2.0使用の場合は「me」(自身)と指定してください。
「me」は認証されたユーザーを示します。

public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Messages messages = users.messages();
    Gmail.Users.Messages.List list = messages.list("メールアドレス");
    
    ListMessagesResponse res = list.execute();
    System.out.println(res);
}

3. いろいろとAPIを叩いてみる

いろいろなAPIを叩いてみます。

3.1. v1.users

ユーザーに関する情報を操作するAPIです。

メソッド 概要 記事
getProfile Gmailプロフィールを取得 ⧉[Gmail API] Javaでメールボックスのユーザープロフィールを取得する
stop メールボックスのプッシュ通知の受信を停止 ⧉[Gmail API] Javaでメールボックスのプッシュ通知を開始・更新・停止する
watch メールボックスでプッシュ通知監視を設定・更新 ⧉[Gmail API] Javaでメールボックスのプッシュ通知を開始・更新・停止する

3.2. v1.users.drafts

メールの下書き(ドラフト)を操作するAPIです。

メソッド 概要 記事
create 新しいメールの下書きを作成 ⧉[Gmail API] Javaでメール下書きを作成・更新・削除、下書きを送信する
delete メールの下書きを削除 ⧉[Gmail API] Javaでメール下書きを作成・更新・削除、下書きを送信する
get メールの下書きを取得 ⧉[Gmail API] Javaでメールの下書きを取得する
list メールの下書き一覧を取得 ⧉[Gmail API] Javaでメールの下書きを取得する
send メールの下書きを送信 ⧉[Gmail API] Javaでメール下書きを作成・更新・削除、下書きを送信する
update メールの下書きを送信 ⧉[Gmail API] Javaでメール下書きを作成・更新・削除、下書きを送信する

3.3. v1.users.history

変更履歴一覧を取得するAPIです。

メソッド 概要 記事
list メールボックスの変更履歴一覧を取得 ⧉[Gmail API] Javaでメールボックスの変更履歴一覧を取得する

3.4. v1.users.labels

ラベルを操作するAPIです。

メソッド 概要 記事
create ラベルを作成 ⧉[Gmail API] Javaでメールボックス内のラベルを作成・更新・削除する
delete ラベルを削除 ⧉[Gmail API] Javaでメールボックス内のラベルを作成・更新・削除する
get ラベルを取得 ⧉[Gmail API] Javaでメールボックス内のラベルを取得する
list レベル一覧を取得 ⧉[Gmail API] Javaでメールボックス内のラベルを取得する
patch ラベルを更新 ⧉[Gmail API] Javaでメールボックス内のラベルを作成・更新・削除する
update ラベルを上書き更新 ⧉[Gmail API] Javaでメールボックス内のラベルを作成・更新・削除する

3.5. v1.users.messages

メッセージ(メール)を操作するAPIです。

メソッド 概要 記事
batchDelete 複数メッセージを一括で削除 ⧉[Gmail API] Javaでメールを削除する、ゴミ箱に捨てる
batchModify 複数メッセージのラベルを一括で更新 ⧉[Gmail API] Javaでメールのラベルを変更する
delete メッセージを削除 ⧉[Gmail API] Javaでメールを削除する、ゴミ箱に捨てる
get メッセージを取得 ⧉[Gmail API] Javaでメールボックス内のメッセージを取得する
import 通常のメール送信と同様の流れで
メールボックスにメールを入れる
⧉[Gmail API] Javaでメールをメールボックスに入れる(自分にメール送信)
insert メールクライアントに介することなく、
メールボックスに直接メールを入れる
⧉[Gmail API] Javaでメールをメールボックスに入れる(自分にメール送信)
list メッセージ一覧を取得 ⧉[Gmail API] Javaでメールボックス内のメッセージを取得する
modify メッセージのラベルを変更 ⧉[Gmail API] Javaでメールのラベルを変更する
send メッセージを送信 ⧉[Gmail API] Javaでメールを送信する
trash メッセージをゴミ箱に入れる ⧉[Gmail API] Javaでメールを削除する、ゴミ箱に捨てる
untrash メッセージをゴミ箱から削除 ⧉[Gmail API] Javaでメールを削除する、ゴミ箱に捨てる

3.6. v1.users.messages.attachments

メールの添付ファイルを取得するAPIです。

メソッド 概要 記事
get メールの添付ファイルを取得 ⧉[Gmail API] Javaでメールの添付ファイルを取得する

3.7. v1.users.settings

ユーザーに関する情報を操作するAPIです。

メソッド 概要 記事
getAutoForwarding 自動転送設定を取得 ⧉[Gmail API] Javaでユーザー設定(言語、不在通知、自動転送、POP、IMAP)を取得する
getImap IMAP設定を取得 ⧉[Gmail API] Javaでユーザー設定(言語、不在通知、自動転送、POP、IMAP)を取得する
getLanguage 言語設定を取得 ⧉[Gmail API] Javaでユーザー設定(言語、不在通知、自動転送、POP、IMAP)を取得する
getPop POP設定を取得 ⧉[Gmail API] Javaでユーザー設定(言語、不在通知、自動転送、POP、IMAP)を取得する
getVacation 不在通知の設定を取得 ⧉[Gmail API] Javaでユーザー設定(言語、不在通知、自動転送、POP、IMAP)を取得する
updateAutoForwarding 自動転送設定を更新 ⧉[Gmail API] Javaでユーザー情報(言語、不在通知、自動転送、POP、IMAP)を設定する
updateImap IMAP設定を更新 ⧉[Gmail API] Javaでユーザー情報(言語、不在通知、自動転送、POP、IMAP)を設定する
updateLanguage 言語設定を更新 ⧉[Gmail API] Javaでユーザー情報(言語、不在通知、自動転送、POP、IMAP)を設定する
updatePop POP設定を更新 ⧉[Gmail API] Javaでユーザー情報(言語、不在通知、自動転送、POP、IMAP)を設定する
updateVacation 不在通知設定を更新 ⧉[Gmail API] Javaでユーザー情報(言語、不在通知、自動転送、POP、IMAP)を設定する

3.8. v1.users.settings.cse.identities

Gmailクライアントサイド暗号化(CSE)に関する情報を操作するAPIです。

メソッド 概要 記事
create CSEを作成 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)を作成・更新・削除する
delete CSEを削除 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)を作成・更新・削除する
get CSEを取得 [Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたIDを取得する
list CSEのリストを取得 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたIDを取得する
patch CSEを更新 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)を作成・更新・削除する

3.9. v1.users.settings.cse.keypairs

Gmailクライアントサイド暗号化(CSE)されたキーペアに関する情報を操作するAPIです。

メソッド 概要 記事
create CSEされたキーペアを生成 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたキーペアを生成・更新・削除する
disable CSEされたキーペアをオフにする ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたキーペアを生成・更新・削除する
enable CSEされたキーペアをオンにする ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたキーペアを生成・更新・削除する
get CSEされたキーペアを取得 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたキーペアを取得する
list CSEされたキーペアの一覧を取得 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたキーペアを取得する
obliterate CSEされたキーペアを削除 ⧉[Gmail API] JavaでGmailクライアントサイド暗号化(CSE)されたキーペアを生成・更新・削除する

3.10. v1.users.settings.delegates

代理人(デリゲート)に関する情報を操作するAPIです。

メソッド 概要 記事
create 代理人情報を生成 ⧉[Gmail API] JavaでGmailの代理人を生成・削除する
delete 代理人情報を削除 ⧉[Gmail API] JavaでGmailの代理人を生成・削除する
get 代理人情報を取得 ⧉[Gmail API] JavaでGmailの代理人の情報を取得する
list 代理人情報の一覧を取得 ⧉[Gmail API] JavaでGmailの代理人の情報を取得する

3.11. v1.users.settings.filters

フィルタに関する情報を操作するAPIです。

メソッド 概要 記事
create フィルターを作成 ⧉[Gmail API] JavaでGmailのフィルタを生成・削除する
delete フィルターを削除 ⧉[Gmail API] JavaでGmailのフィルタを生成・削除する
get フィルターを取得 ⧉[Gmail API] JavaでGmailのフィルタ情報を取得する
list フィルターの一覧を取得 ⧉[Gmail API] JavaでGmailのフィルタ情報を取得する

3.12. v1.users.settings.forwardingAddresses

転送アドレスに関する情報を操作するAPIです。

メソッド 概要 記事
create 転送アドレスを作成 ⧉[Gmail API] Javaで転送アドレスを作成・削除する
delete 転送アドレスを削除 ⧉[Gmail API] Javaで転送アドレスを作成・削除する
get 転送アドレスを取得 ⧉[Gmail API] Javaで転送アドレスを取得する
list 転送アドレス一覧を取得 ⧉[Gmail API] Javaで転送アドレスを取得する

3.13. v1.users.settings.sendAs

送信者エイリアスに関する情報を操作するAPIです。

メソッド 概要 記事
create 送信者エイリアスを作成 ⧉[Gmail API] Javaで送信者エイリアスを作成・更新・削除する
delete 送信者エイリアスを削除 ⧉[Gmail API] Javaで送信者エイリアスを作成・更新・削除する
get 送信者エイリアスを取得 ⧉[Gmail API] Javaで送信者エイリアスを取得する
list 送信者エイリアス一覧を取得 ⧉[Gmail API] Javaで送信者エイリアスを取得する
patch 送信者エイリアスを更新 ⧉[Gmail API] Javaで送信者エイリアスを作成・更新・削除する
update 送信者エイリアスを上書き更新 ⧉[Gmail API] Javaで送信者エイリアスを作成・更新・削除する
verify 送信者エイリアスのアドレスに確認メールを送信 ⧉[Gmail API] Javaで送信者エイリアス宛に確認メールを送る

3.14. v1.users.settings.sendAs.smimeInfo

S/MIME構成に関する情報を操作するAPIです。

メソッド 概要 記事
delete S/MIME構成を削除 ⧉[Gmail API] Javaで送信元エイリアスのS/MIME構成を設定・削除する
get S/MIME構成を取得 ⧉[Gmail API] Javaで送信元エイリアスのS/MIME構成を取得する
insert S/MIME構成を挿入 ⧉[Gmail API] Javaで送信元エイリアスのS/MIME構成を設定・削除する
list S/MIME構成をの一覧を取得 ⧉[Gmail API] Javaで送信元エイリアスのS/MIME構成を取得する
setDefault デフォルトのS/MIME構成を設定 ⧉[Gmail API] Javaで送信元エイリアスのS/MIME構成を設定・削除する

3.15. v1.users.threads

スレッドに関する情報を操作するAPIです。

メソッド 概要 記事
delete スレッドを削除 ⧉[Gmail API] Javaでメールボックス内スレッドのラベル追加・削除、スレッドの削除をする
get スレッドを取得 ⧉[Gmail API] Javaでメールボックス内のスレッドを取得する
list スレッドの一覧を取得 ⧉[Gmail API] Javaでメールボックス内のスレッドを取得する
modify スレッドのラベルを変更 ⧉[Gmail API] Javaでメールボックス内スレッドのラベル追加・削除、スレッドの削除をする
trash スレッドをゴミ箱に入れる ⧉[Gmail API] Javaでメールボックス内スレッドのラベル追加・削除、スレッドの削除をする
untrash ゴミ箱からスレッドを削除 ⧉[Gmail API] Javaでメールボックス内スレッドのラベル追加・削除、スレッドの削除をする


おしまい。。
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2