LoginSignup
1
2

[Gmail API] Javaでメッセージ本文を作成する

Last updated at Posted at 2024-03-20

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エンコードされたメッセージ部分の本体データ


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