【GAS】スプレッドシートシートからGmailの下書きを一括作成する(createDraft)
Google Apps Script(GAS)でGmailの下書きを作成する方法を解説します。
基本的な下書き作成方法(createDraftメソッドの使い方)を確認後、スプレッドシートを利用して下書きを一括で自動生成する方法、本文中に各宛先ごとの情報を挿入する方法をご紹介します。
下書き作成はcreateDraftメソッド
基本構文
GmailApp.createDraft(to , subject , body [, option])
- to(必須):送信先のメールアドレス
- subject(必須):メールの件名
- body(必須):メールの本文
- option(任意):CC、BCC、添付ファイル、返信先等のオプション設定
recipient/subject/bodyは文字列を引数とすればOKで、optionはパラメータオブジェクトとして格納します。下記のようなパラメータを設定できるので自由度高くメール作成できそうですね。
オプション名 | 説明 |
---|---|
attachments | メールに添付するファイル |
bcc | bcc に挿入するアドレス |
cc | cc に挿入するアドレス |
from | 送信元のアドレス |
name | 送信元の表示名 |
replyTo | 返信先アドレス |
noReply | メッセージに返信不要の場合はtrueを設定 |
noReplyをtrueにすると、送信元表示が「noreply@…」になります。
サンプルコード
function CreateDraft() {
let recipient = "aaa@gmail.com";
let subject = "テストです";
let body = "ここは本文です";
let options ={
cc: "cc@gmail.com",
bcc:"bcc@gmail.com"
};
GmailApp.createDraft(recipient,subject,body,options);
}
実行すると、うまく下書き保存ができました。
次はスプレッドシートを読み込んだ情報から下書きを一括で作成を行ってみます。
スプレッドシートから複数の下書きを一括で作成する
メール情報のスプレッドシートを用意
3つのアドレスに送ることを想定して、宛先とそれに紐づく情報を3行用意しておきます。
このスプレッドシートの情報をGASで読み取ってみましょう。
function myFunction() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet(); //アクティブなスプレッドシート・シートを取得
let range = sheet.getDataRange(); //データが入っている範囲全てを選択
let data = range.getValues(); //データを取得
console.log(data);
}
// console.log(data);
[[aaa@gmail.com, テスト3です①, ここに本文が入ります, cc_1@gmail.com], [bbb@gmail.com, テスト3です②, ここに本文が入ります, cc_2@gmail.com], [ccc@gmail.com, テスト3です③, ここに本文が入ります, cc_3@gmail.com]]
下書きに入力したい情報が格納できました。
createDraftメソッドで下書き作成
それでは取得した情報をcreateDraftメソッドの構文に沿って引数に入れ、下書き作成を実行してみます。
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet(); //アクティブなスプレッドシート・シートを取得
let range = sheet.getDataRange(); //データが入っている範囲全てを選択
let data = range.getValues(); //データを取得
//データの要素分(行数分)の反復処理
//スタートを「1」とすることで先頭要素(列名)での処理を除外
for(let i = 1; i < data.length; i++){
let recipient = data[i][0]; // 宛先
let subject = data[i][1]; // 件名
let body = data[i][2]; // 本文
let options ={
cc: data[i][3], // cc
};
GmailApp.createDraft(recipient,subject,body,options);
};
本文中に宛先ごとの情報(宛名や企業名)を挿入する
上記の例ではすべての宛先に全く同じ本文を送るという一番シンプルな想定でした。
実際にメールを一括で送付する際には、本文中には企業名、宛名等の送付先に合わせた記述を行うことが大半だと思います。一括作成時に本文の内容を送付先ごとの情報に書き換えるには少々テクニックが必要ですので、こちらのパートでご紹介します。
スプレッドシート上ではすべての宛先に対して同一の本文を記載しておき、本文中の特定文字列を宛先単位の情報に置換する、というのが今回の作業のポイントです。
それでは手順を解説します。
置き換えたい箇所に置換用文字列を挿入した本文を用意
まずは前述の例と同様に一行一宛先として情報を記載したスプレッドシートを用意します。同じ例を使いたい場合はこちらのリンクからシートごとコピーしてください。
本文内の宛先単位の情報に置き換えたい箇所に、{{企業名}}、{{宛名}}といった置換用の文字列を挿入しておきます。
今回は二重波線を用いましたが、置換用に判別できるような文字列ならなんでも問題ありません。しかし、例えば『担当者』といった汎用的な文言だと本来置換したくない箇所も置換されてしまう可能性があるので、『{{担当者}}』といった形で、確実に置換対象だと判別できる文字列にしておきましょう。
{{企業名}}
{{宛名}}
いつもお世話になっております。
株式会社ABCの山田と申します。
平素よりお世話になっております。
本日はセミナーのご案内でご連絡いたしました。
ぜひこの機会にご参加くださいませ。
==========
▼〇年〇月〇日開催 株式会社XYZ × 株式会社ABC セミナー
==========
{{宛名}}様のご参加お待ちしております。
各行ごとに情報を置換しながら下書き作成の反復処理を実行
最後に本文の置換用文字列を各行ごとの情報に置換しながら下書き作成を実行していきます。
本文を取得した後に、replaceメソッドを用いて同じく取得した宛先単位情報に書き換えながら下書き作成を反復実行していきます。
String.replace(searchPattern, replacement)
- Srting:置換対象の文字列
- searchPattern(string/regex、必須):検索パターン文字列または正規表現、一致するものが置換される
- replacement(必須):置換文字列
- 戻り値:置換後の文字列
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet(); //アクティブなスプレッドシート・シートを取得
let range = sheet.getDataRange();
let data = range.getValues();
for(let i = 1; i < data.length; i++){
let subject = 'セミナーのご案内'; // 件名
let recipient = data[i][0]; // 宛先
let company = data[i][1]; // 企業名
let name = data[i][2]; // 宛名
let body = data[i][3]; // 本文
//本文中の文字列の書き換え
//企業名の置き換え
body = body.replace(/{{企業名}}/g,company);
//宛名の置き換え
body = body.replace(/{{宛名}}/g,name);
//連続で変換しても問題なし
// body = body.replace(/{{企業名}}g/,company).replace(/{{宛名}}/g,name);
GmailApp.createDraft(recipient,subject,body);
};
各宛先ごとの内容で下書きを作成できました。
まとめ
GASでGmailの下書きを一括で作成する方法をご紹介しました。
- createDraftメソッドで下書きを作成できる
- 引数に「宛先」「件名」「本文」、その他「BCC」や「返信先アドレス」を指定できる
- スプレッドシートに用意した情報読み込んで複数の下書きを一括で作成できる
- 処理途中での文字列置換を利用し、本文中に宛先ごとの情報を挿入できる。