Gmail APIで共通して使用する
com.google.api.services.gmail.model.Messageクラス
についてご紹介します。
Gmail APIを使用する上でMessageクラスはよく出てくるクラスですので、
メッセージ本文の生成の方法を記事にまとめました。
Gmail APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Gmail API] JavaでGmail APIを使う
を参照ください。
No | 目次 | |
---|---|---|
1 | jakarta.mailライブラリの使用 | |
2 | MimeMessageインスタンス生成 | |
1 | 添付ファイルがない場合 | |
2 | 添付ファイルがある場合 | |
3 | MimeMessageクラスのメソッド | |
1 | メールヘッダ | |
2 | メッセージボディ | |
4 | Messageインスタンスの取得 |
1. jakarta.mailライブラリの使用
メッセージを生成する際、jakarta.mailライブラリのMimeMessageクラスを使います。
<dependency>
<groupId>org.eclipse.angus</groupId>
<artifactId>jakarta.mail</artifactId>
<version>1.0.0</version>
</dependency>
2. MimeMessageインスタンス生成
サンプルでは最小限のコードをご紹介しています。
これにヘッダを追加したい場合は、
3.1. メールヘッダを参考にしてください。
プレーンテキスト以外の本文を指定したい場合(例えばHTML)は、
3.2. メッセージボディを参考にしてください。
2.1. 添付ファイルがない場合
サンプルでは、TO,件名,本文(テキスト)を指定して
MimeMessageインスタンスを生成しています。
public static MimeMessage createMimeMessage(String to,String subject,String body) throws Exception {
Session session = Session.getDefaultInstance(new Properties());
MimeMessage email = new MimeMessage(session);
email.setRecipient(jakarta.mail.Message.RecipientType.TO,new InternetAddress(to));
email.setSubject(subject);
email.setText(bodyText);
return email;
}
2.2. 添付ファイルがある場合
サンプルでは、TO,件名,本文(テキスト),添付ファイル(ファイルパス)を指定して
MimeMessageインスタンスを生成しています。
引数のfilesは、key:ファイル名、value:ファイルパスのMapです。
public static MimeMessage createMimeMessage(String to,String subject,String body,Map<String,String> files) throws Exception {
Session session = Session.getDefaultInstance(new Properties());
MimeMessage email = new MimeMessage(session);
email.setRecipient(jakarta.mail.Message.RecipientType.TO,new InternetAddress(to));
email.setSubject(subject);
//メッセージボディの設定は「MimeMultipart」を使用します
MimeMultipart multipart = new MimeMultipart();
MimeBodyPart text = new MimeBodyPart();
text.setText(body);
multipart.addBodyPart(text);
for(Map.Entry<String,String> file : files.entrySet()) {
MimeBodyPart part = new MimeBodyPart();
part.setDataHandler(new DataHandler(new FileDataSource(file.getValue())));
part.setFileName(file.getKey());
multipart.addBodyPart(part);
}
email.setContent(multipart);
return email;
}
3. MimeMessageクラスのメソッド
MimeMessageのsetメソッドをメールヘッダとメッセージボディ、
それぞれに一覧を用意しました。
3.1. メールヘッダ
ヘッダ | 概要 | メソッド |
---|---|---|
From | 差出人アドレス | addFrom(Address[] addresses) |
setFrom(Address address) | ||
setFrom(String address) | ||
Sender | 実際の差出人アドレス | setSender(Address address) |
To | 宛先アドレス | addRecipients(Message.RecipientType type, Address[] addresses) |
addRecipients(Message.RecipientType type, String addresses) | ||
addRecipient(Message.RecipientType type, Address addresses) | ||
setRecipients(Message.RecipientType type, Address[] addresses) | ||
setRecipients(Message.RecipientType type, String addresses) | ||
setRecipient(Message.RecipientType type, Address addresses) | ||
typeにMessage.RecipientType.TO指定 | ||
cc | CCアドレス | Toと同じ typeにMessage.RecipientType.CC指定 |
bcc | BCCアドレス | Toと同じ typeにMessage.RecipientType.BCC指定 |
Subject | メール件名 | setSubject(String subject) |
setSubject(String subject, String charset) | ||
Date | メールの作成日時 | setSentDate(Date d) |
filename | メールに添付されるファイル名 | setFileName(String filename) |
Content-ID | コンテンツ識別子 (Message-IDと同じ) |
setContentID(String cid) |
Content-Description | 注釈 | setDescription(String description) |
setDescription(String description, String charset) | ||
Content-Disposition | ファイルの扱いを指定 inline:WEBで表示 attachment:ダウンロード |
setDisposition(String disposition) |
Content-Language | 言語コード | setContentLanguage(String[] languages) |
Content-MD5 | MD5ハッシュ値 メッセージボディの変更保証に使用 |
setContentMD5(String md5) |
その他 | 上記にないヘッダ | addHeaderLine(String line) |
addHeader(String name, String value) | ||
setHeader(String name, String value) |
3.2. メッセージボディ
種類 | メソッド |
---|---|
プレーンテキスト | setText(String text) |
setText(String text, String charset) | |
setText(String text, String charset, String subtype) | |
プレーンテキスト以外 | setContent(Multipart mp) |
setContent(Object o, String type) |
4. Messageインスタンスの取得
2. MimeMessageインスタンス生成で取得したインスタンスを渡して
Messageインスタンスを生成します。
Base64クラスは、「org.apache.commons.codec.binary」のクラスです。
public static Message createMessage(MimeMessage email) throws IOException, MessagingException {
byte[] bytes = null;
try(ByteArrayOutputStream buffer = new ByteArrayOutputStream()){
email.writeTo(buffer); //メッセージをストリームへ出力
bytes = buffer.toByteArray();
}
String encodedEmail = Base64.encodeBase64URLSafeString(bytes);
Message message = new Message();
message.setRaw(encodedEmail);
return message;
}
Message
メソッド | 引数 | 説明 |
---|---|---|
setId | String | メッセージID |
setThreadId | String | メッセージが属するスレッドID |
setLabelIds | List<String> | このメッセージに適用されるラベルIDリスト |
setSnippet | String | メッセージテキストのスナップショット |
setHistoryId | String | このメッセージを変更した最後の履歴レコードID |
setInternalDate | Long | 内部メッセージ作成タイムスタンプ(エポックミリ秒) |
setPayload | MessagePart | メッセージ部分の解析された内容 |
setSizeEstimate | Integer | メッセージの推定サイズ(バイト単位) |
setRaw | String | Base64 URLエンコードされたメッセージ |
MessagePart
メソッド | 引数 | 説明 |
---|---|---|
setPartId | String | メッセージ部分ID |
setMimeType | String | メッセージ部分のMIMEタイプ |
setFilename | String | 添付ファイルのファイル名 |
setHeaders | List<Header> | メッセージ部分のヘッダーリスト |
setBody | MessagePartBody | メッセージ部分の本文 |
setParts | List<MessagePart> | 子のMIMEメッセージ部分 |
Header
メソッド | 引数 | 説明 |
---|---|---|
setName | String | セパレータの前のヘッダーの名前。例:"To" |
setValue | String | 区切り文字の後のヘッダー値 |
MessagePartBody
メソッド | 引数 | 説明 |
---|---|---|
setAttachmentId | String | 添付ファイルID |
setSize | Integer | メッセージ部分データのバイト数 |
setData | String | Base64 URLエンコードされたメッセージ部分の本体データ |
おしまい。。