Gmailで大量の送信先にメールを送るときにスプレッドシートで管理するスクリプトを書いたので使ってほしい。
スクショはこんな感じ。
![スクリーンショット 2020-03-14 15.29.04.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F112929%2Ff80526fc-b107-853b-81c6-9557e237bed2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=17b8b022a7973f78b56e048435d22d79)
下書き作成
ぼたんポチすると
![スクリーンショット 2020-03-14 15.32.25.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F112929%2F4ff9744d-3480-bc82-de24-05ae5d10a056.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9f62a1b3930a24a8cdeba2ba8ac522c4)
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
に紐づけています。
発火したら、今ひらいているページのデータを読み込みにいってメール送信するので、こんな感じでどんどんタブを追加していって、どの時はどの人たちにメールを送ったのか、そういう履歴もわかりますです。
![スクリーンショット 2020-03-14 15.30.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F112929%2F531d3c33-1083-95fd-b81e-c74922b9af2d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1bfeba60cd42a4303dccbef53075ab85)
以上。
今日さくっと作ったやつですが、必要な方いたら使ってください。