Googleが提供しているGmail APIをJavaで使ってみました。
Gmail APIとは
Googleが提供しているAPIで、Gmailに関する操作ができます。
Gmail APIの利用料金は無料です。
ただし、1秒あたり250クォータの制限があります。
クォータの単位は、実行するGmailAPIの種類により決められます。
詳細はGoogleの公式ドキュメントをご覧ください。
⧉APIの使用制限
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とサービス」 -> 「ライブラリ」 を選択します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F114621%2F2fda7515-ffdf-11d7-4142-fed896cc8413.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3f83e104f8393e988e378eb8fa04f686)
2. Gmail と入力して「Gmail API」を検索します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F114621%2F49a49f66-2427-daa8-3a21-2081ad7dad1a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3e26596111a871cc5360c798c727d25d)
3. 「有効にする」ボタンを押して「Gmail API」を使用可能にします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F114621%2F13026954-b968-df8b-b698-b8fb6445c706.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=bfe4b76ce398b0341c93e09c71d11b16)
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でメールボックス内スレッドのラベル追加・削除、スレッドの削除をする |
おしまい。。