Gmailで大量の送信先にメールを送るときにスプレッドシートで管理するスクリプトを書いたので使ってほしい。
スクショはこんな感じ。
下書き作成
ぼたんポチすると
Gmail側に下書きが保存されます。目で目視してから使ってくれ。
FAQ
- BCCじゃだめなんですか?
- Toでたくさん贈りたいときもあるよね…??
- え、もしかして ひとつひとつの宛先ごとにメール作ってくれるの?
- そうです!
- プログラムから実行すると、間違ったときに不安!!!
- 大丈夫です。下書き
GmailApp.createDraft(to, subject, body)
で作ってます! - 自分の目で確認してから、Gmailから送信ボタンぽちぽちしてください。
- 大丈夫です。下書き
- 悪いことに使っていい?
- 絶対にやめてください。特定電子メール法に則って使ってください。
共有
ファイルを共有したので自分のドライブにコピーして使ってほしいです。
共有リクエストしないでくださいね〜
↓共有リクエストくるたびにメールきてます。
あ、もちろん実際に使われているコードがどんなのか見てから使ってほしいのと、Gmailから権限要求されるので適切に許可してあげてほしい。
実装
/** *****************************************
[ [ '項目', '内容', 'To', 'Name' ],
[ '件名', 'XXXXの件について', 'example@example.com', '開発室example さま' ],
[ '書き出し', '', 'example+123@example.com', '総務 田中 さま' ],
[ '本文', '', '', '' ],
[ 'To欄の数', 2, '', '' ] ]
***************************************** */
const allData = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
/** *****************************************
['XXXXの件について', '本文']
***************************************** */
const commonData = allData.filter(x => (x[0] === "件名" || x[0] === "本文")).map(x => x[1]);
/** *****************************************
[ [ 'tanaka@example.com', '開発室example さま' ],
[ 'AAA@example.com', '総務 田中 さま' ] ]
***************************************** */
const toMailData = allData.filter(x => (x[2] !== "To" && x[2] !== "")).map(x => [x[2], x[3]])
function createDraft() {
const subject = commonData[0];
// GmailApp.createDraft(["hirao@openlogi.com", "hirao+2@openlogi.com"], subject, "body test");
toMailData.forEach(async x => {
console.log(x[0]);
const to = x[0];
const body = createBody(x[1]);
await GmailApp.createDraft(to, subject, body);
})
}
/**
* @todo メッセージ本文入れたり署名欄とか拡張する
*/
function createBody(name) {
return name + "\n\n" + commonData[1];
}
下書き作成
ってボタンをスプレッドシート内のGASの関数 createDraft
に紐づけています。
発火したら、今ひらいているページのデータを読み込みにいってメール送信するので、こんな感じでどんどんタブを追加していって、どの時はどの人たちにメールを送ったのか、そういう履歴もわかりますです。
以上。
今日さくっと作ったやつですが、必要な方いたら使ってください。