LoginSignup
1
2

[Gmail API] Javaでメールをメールボックスに入れる(自分にメール送信)

Posted at

Gmail API v1(Java)を使用して、
Gmailでメールをメールボックスに入れる方法
についてご紹介します。

メールボックスにメールを入れる方法は下記の2通りあります。

・メールボックスに直接メールを入れる
メールクライアントに介することなく、メールボックスに直接メールを入れます。
IMAPコマンドのAPPENDを実行した場合と同じ動きです。
(IMAP:メールサーバー側のメール受信に使用する機能)

・SMTPサーバーを介してメールボックスにメールを入れる
通常のメール送信と同様の流れでメールボックスにメールを入れます。
ただし、SPFチェックは行われません。
(SPF:電子メールの送信元ドメインが詐称されていないかを検査するための仕組み)

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Gmail API] JavaでGmail APIを使う
を参照ください。

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

No 目次
1 メールをメールボックスに入れる(INSERT)
1 スコープ
2 実行
3 レスポンスの内容
2 メールをメールボックスに入れる(IMPORT)
1 スコープ
2 実行
3 レスポンスの内容

1. メールをメールボックスに入れる(INSERT)

メールクライアントに介することなく、メールボックスに直接メールを入れます。

1.1. スコープ

このAPIを実行するには、以下のいずれかのスコープを指定してください。

GmailScopes.MAIL_GOOGLE_COM
GmailScopes.GMAIL_MODIFY
GmailScopes.GMAIL_INSERT

⧉[Gmail API] JavaでGmail APIを使う(2.2 Gmailインスタンスを取得)
でスコープを指定してください。

1.2. 実行

送信するMessageを生成してメールを送信します。

createMimeMessage()、createMessage()の説明は、
⧉[Gmail API] Javaでメッセージ本文を作成する
を参照ください。

public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    Gmail.Users.Messages messages = users.messages();
    
    Map<String,String> files = new HashMap<>();
    files.put("添付ファイル名","添付ファイルパス");
    Message content = createMessage(createMimeMessage("Toメールアドレス","件名","本文",files));
    Gmail.Users.Messages.Insert insert = messages.insert("me",content);
    
    Message res = insert.execute();
    System.out.println(res);
}
1.2.1. HTTPリクエスト

添付ファイルがない場合
POST: https://gmail.googleapis.com/gmail/v1/users/{メールアドレス}/messages

添付ファイルがある場合
POST: https://gmail.googleapis.com/upload/gmail/v1/users/{メールアドレス}/messages

が実行されます。

1.2.2. クエリパラメータ

Gmail.Users.Messages.Insertのsetメソッドにより、クエリパラメータを追加できます。

メソッド 引数 説明
setInternalDateSource InternalDateSource(enum) Gmail内部のメールの日付
setDeleted Boolean メールを完全に削除して、GoogleVaultの管理者のみに表示されるようにするか
GoogleWorkspaceのアカウントでのみ使用可能

InternalDateSource

定義値 内容
receivedTime Gmailで受信した社内メールの日付を現在時刻
dateHeader メールの「日付」ヘッダーに基づく内部メッセージ時間
1.2.3. リクエストボディ

Messageのsetメソッドにより、リクエストボディを設定できます。

Messageクラスのsetterの詳細は、
⧉[Gmail API] Javaでメッセージ本文を作成する(Message)
を参照ください。

1.3. レスポンスの内容

Message

メソッド 戻り値 説明
getId String メッセージID
getThreadId String メッセージが属するスレッドID
getLabelIds List<String> このメッセージに適用されるラベルのIDのリスト
getSnippet String メッセージテキストの短い部分
getHistoryId String このメッセージを変更した最後の履歴レコードの ID
getInternalDate Long 内部メッセージ作成タイムスタンプ(エポックミリ秒)
getPayload MessagePart メッセージ部分の解析された電子メール構造。
getSizeEstimate Integer メッセージの推定サイズ(バイト単位)
getRaw String RFC2822形式で Base64URLエンコードされた文字列の電子メールメッセージ全体

MessagePart

メソッド 戻り値 説明
getPartId String メッセージ部分ID
getMimeType String メッセージ部分のMIMEタイプ
getFilename String 添付ファイルのファイル名
getHeaders List<MessagePartHeader> メッセージ部分のヘッダーのリスト
getBody MessagePartBody メッセージ部分の本文
getParts List<MessagePart> 子のMIMEメッセージ部分

MessagePartHeader

メソッド 戻り値 説明
getName String セパレータの前のヘッダーの名前
getValue String 区切り文字の後のヘッダーの値

MessagePartBody

メソッド 戻り値 説明
getAttachmentId String 添付ファイルID
getSize Integer メッセージ部分データのバイト数
getData String MIME メッセージ部分の本文データ(base64 url エンコード文字列)

2. メールをメールボックスに入れる(IMPORT)

通常のメール送信と同様の流れでメールボックスにメールを入れます。

2.1. スコープ

このAPIを実行するには、以下のいずれかのスコープを指定してください。

GmailScopes.MAIL_GOOGLE_COM
GmailScopes.GMAIL_MODIFY
GmailScopes.GMAIL_INSERT

⧉[Gmail API] JavaでGmail APIを使う(2.2 Gmailインスタンスを取得)
でスコープを指定してください。

2.2. 実行

送信するMessageを生成してメールを送信します。

送信元(From)は必須になります。
指定していない場合はエラーになります。

createMimeMessage()、createMessage()の説明は、
⧉[Gmail API] Javaでメッセージ本文を作成する
を参照ください。

public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    Gmail.Users.Messages messages = users.messages();
    
    Map<String,String> files = new HashMap<>();
    files.put("添付ファイル名","添付ファイルパス");
    Message content = createMessage(createMimeMessage("Toメールアドレス","件名","本文",files));
    Gmail.Users.Messages.GmailImport gmailImport = messages.gmailImport("me",content);
    
    Message res = gmailImport.execute();
    System.out.println(res);
}
2.2.1. HTTPリクエスト

添付ファイルがない場合
POST: https://gmail.googleapis.com/gmail/v1/users/{メールアドレス}/messages/import

添付ファイルがある場合
POST: https://gmail.googleapis.com/upload/gmail/v1/users/{メールアドレス}/messages/import

が実行されます。

2.2.2. クエリパラメータ

Gmail.Users.Messages.GmailImportのsetメソッドにより、クエリパラメータを追加できます。

メソッド 引数 説明
setInternalDateSource InternalDateSource(enum) Gmail内部のメールの日付
setDeleted Boolean メールを完全に削除して、GoogleVaultの管理者のみに表示されるようにするか
GoogleWorkspaceのアカウントでのみ使用可能
setNeverMarkSpam Boolean Gmailの迷惑メール分類基準を無視し、迷惑メールに分類しないようにするか
setProcessForCalendar Boolean メールに含まれるカレンダーの招待状を処理し、Googleカレンダーに追加するか
2.2.3. リクエストボディ

Messageのsetメソッドにより、リクエストボディを設定できます。

Messageクラスのsetterの詳細は、
⧉[Gmail API] Javaでメッセージ本文を作成する(Message)
を参照ください。

2.3. レスポンスの内容

Message

2.3. レスポンスの内容(Message)と同じです。



おしまい。。
1
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
1
2