LoginSignup
5
4

More than 1 year has passed since last update.

【大量のGmailを一括下書き作成】スプレッドシートから管理するスクリプトを書いたので使ってほしい。

Last updated at Posted at 2020-03-14

Gmailで大量の送信先にメールを送るときにスプレッドシートで管理するスクリプトを書いたので使ってほしい。

スクショはこんな感じ。

スクリーンショット 2020-03-14 15.29.04.png

下書き作成 ぼたんポチすると

スクリーンショット 2020-03-14 15.32.25.png

Gmail側に下書きが保存されます。目で目視してから使ってくれ。

FAQ

  • BCCじゃだめなんですか?
    • Toでたくさん贈りたいときもあるよね…??
  • え、もしかして ひとつひとつの宛先ごとにメール作ってくれるの?
    • そうです!
  • プログラムから実行すると、間違ったときに不安!!!
    • 大丈夫です。下書き GmailApp.createDraft(to, subject, body) で作ってます!
    • 自分の目で確認してから、Gmailから送信ボタンぽちぽちしてください。
  • 悪いことに使っていい?
    • 絶対にやめてください。特定電子メール法に則って使ってください。

共有

ファイルを共有したので自分のドライブにコピーして使ってほしいです。
共有リクエストしないでくださいね〜

↓共有リクエストくるたびにメールきてます。

スクリーンショット 2023-01-15 21.14.32.png

あ、もちろん実際に使われているコードがどんなのか見てから使ってほしいのと、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

以上。

今日さくっと作ったやつですが、必要な方いたら使ってください。

5
4
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
5
4