意外と知られていない?こんな落とし穴も?!編集した下書きメールの一括送信

はじめに

直近、メール関連業務の手間を軽減したいと社内の方からご相談をいただくことがありました。宛先、宛名だけ変えた同じ文面のメールを送るようなことがあり、何十、何百と送信するとなると相当な手間になるので解決したい。送付先に応じて後から下書きを編集、確認をしてからメール送信ができる形にしたいという希望でした。

作成を通じてGASのメール作成について調べてみると、メールの下書き作成から一括送信までのGASのスクリプトの作成の紹介はありましたが、メールの下書きを生成した後に、編集内容を確認してメールを一括送信する、というケースを想定したGASのスクリプトの紹介が意外とありませんでした。

そこで本記事で、メールの下書き作成から下書きを確認して編集したメールの送信までのスクリプトの作成方法を紹介していき、その中での意外な落とし穴も含めて紹介したいと思います

スクリプト作成の流れ

以下の流れでスクリプトを作成します。

  1. メール宛先一覧の作成
  2. メールひな形の準備
  3. 下書きメール生成のスクリプトの作成
  4. 編集後下書きメールの一括送信スクリプトの作成

メール宛先一覧の作成

メール宛先一覧を作成します。一覧の情報はシンプルに宛名、メールアドレス、後にメール送信時に必要になるメッセージIDのみにしました。宛先に応じて添付ファイルを変える場合には、添付ファイルの情報を付けるのもよいと思います。シート名は「アドレス一覧」にしています。

メールひな形の準備

メールの件名とメール本文のひな形を準備します。本文内の宛名部分は「アドレス一覧」シートA列の宛名の値を置き換えするようにします。置き換えする箇所が一目でわかるように{宛名}としています。シート名は「メール設定」にしています。

下書きメール生成のスクリプトの作成

下書きメール生成のスクリプトを作成します。詳細は割愛しますが、下書きメールのオプションに返信時の宛先の指定「replyTo」を入れているところがポイントになります。
例えば、送信用のアドレスと送信したメールに対する返信受付用のアドレスを別に分けたいときときに「repleyTo」に返信受付用のアドレスを設定するという使い方ができます。
メールオプションの詳細については以下リンク先を参照ください。

【ご参考】
メールオプションについて(英語サイト)

スクリプトを実行して作成した下書きメールは以下の形になります。

編集後メール下書きの一括送信スクリプトの作成

編集後の下書きメールの一括送信のスクリプトの作成をします。
アドレス一覧の下書きメールのメッセージIDを取得し、メールオプションを更新した後に対象の下書きメールを送信し、メッセージIDの欄を更新するフローになっています。

メール下書き編集メソッド-GmailDraftクラス-

スクリプトでは、メール下書き編集を行うGmailDarftクラスのメソッドを利用しています。
ここで注意いただきたいことは、下書き生成時にメールオプションを設定していても、メールの編集を行うとオプションが消えてしまうという事象を確認しています。そのため、下書きメール生成時にオプションを付けている場合には、送信をする前に下書きメールの更新をする必要があります。
また、updateメソッドはオプションのみの更新ができないため、一度下書きメールの情報(宛先、件名、本文)を取得し、updateメソッドで再度設定する必要がある点も注意が必要です。
今回利用したメソッドは以下の通りになります。下書き編集メソッドは他にもあるので、GoogleAppsScriptのReferenceを参照いただければと思います。
【ご参考】
GmailDraftクラスのメソッドについて(英語サイト)

メソッドタイプメソッドの説明
getId()String下書きメールのメッセージIDを取得します。
getMessage()GmailMessage下書きメールのメッセージを取得します。
send()GmailMessage下書きメールを送信します。
update(recipient, subject, body, options)GmailDraft下書きメールの更新をします。宛先、件名、本文、オプションが更新対象です。
上記参照先サイトより部分的に抜粋し引用(一部翻訳)

最後に

下書きメールの編集を行うとオプションが消えてしまうということを知り、大変驚きました。最初はメール送信アカウント情報の問題かと思い、アカウント自体にも返信時の宛先設定をしてみたものの、オプション情報が消去されてしまいました。GoogleAppsScriptのReferenceにも記載もなく、実際に使ってみないと気が付きませんでした。検証の大事さを改めて学びました。

紹介させていただいた内容は難しいものではありませんが、活用できる点があれば幸いです。