Google 스프레드시트 – 메일 매거진 스타일 일괄 전송

이번에는 제목대로,
스프레드시트에 이메일 주소 목록이 있는 경우 이를 순서대로 제출하는 프로그램을 만들었습니다.
솔직히, 담당자가 빠져든지 주소가 빠져 있다든가, 그러한 체크 처리는 하고 있지 않습니다. (웃음)

아래 다양한 GAS 기사를 소개합니다!
htps : // bz 보트 t. rk /

소개 기사
이번 소개하고 있는 기사는 이하입니다!
htps : // bz 보트 t. rk / 2019/02/03 / sp re d

주소 목록 시트



여기에서는 송신하는 수신처와 담당자의 이름을 일람으로 등록해 두는 시트로, 수식 등 이용은 하지 않고 그대로의 데이터를 등록하는 이미지입니다.


내용 템플리 시트



여기에서는 송신하기 위한 내용(본문)에 해당하는 부분을 써 갑니다.
송신하는 사람에 의해서 본문을 매회 바꾸어 보내고 있는 것은 별로 없다고 생각하므로, 내용(본문)의 템플릿을 만들어 갑니다.
※「받는 사람」과 「담당자명」은 프로그램으로 자동 취득하기 위해서, 공란으로 해 주세요


메일 템플릿



여기에서는 최종적으로 송신하는 목적지와 건명(통일), 본문을 넣고 있습니다.
To에는 다음 수식을 넣어 둡니다.

= '내용 템플리'!B1

다음에 Subject입니다만, 여기도 메일에 의해 내용 바꾸는 것은 별로 없다고 생각하므로 이번은 「메르마가풍 일괄 송신」이라고 붙입니다.
※코피페라면 싱글 쿼트가 전각이 되어 버리는 경우가 있습니다

마지막으로 Body입니다만, 이하를 넣어 둡니다.

='내용 템플리'!B2&”님”&char(10)&'내용 템플리'!B3

그러면 내용 템플리에서 취득한 값을 담당자라면 '님'을 붙인 형태로 하는 등 커스텀 할 수 있습니다.


GAS
function goGoMM() {
//アクティブシートで指定した(こっちの方が一般的ね(笑))
  var sheet = SpreadsheetApp.getActiveSpreadsheet();

  //「メーリングリスト」のシートをアクティブにして、シート情報をmListに取得
  var mList = sheet.setActiveSheet(sheet.getSheetByName("メールリスト"));
  //「内容テンプレ」のシートをアクティブにして、シート情報をbTempに取得
  var bTemp = sheet.setActiveSheet(sheet.getSheetByName("内容テンプレ"));
  //「メールテンプレ」のシートをアクティブにして、シート情報をmTempに取得
  var mTemp = sheet.setActiveSheet(sheet.getSheetByName("メールテンプレ"));

  //取得したmListの最終行を取得する
  var lastR = mList.getLastRow();
  Logger.log("【lastR】:" + lastR);

  //lastRは最初から最後の行までをカウントしているので、対象となるデータが入っている個数をカウントしてしまってます。(タイトルもカウントしているってこと)
  var popUp = Browser.msgBox("送信確認!","送信対象数"+lastR+"件です。(1行目もカウントしてます)実行しますか?", Browser.Buttons.OK_CANCEL);
  if (popUp == 'ok') {

    //取得した最終行までの情報を配列で取得する
    var mlvalue = mList.getRange(1, 1, lastR, 2).getValues();
    Logger.log("【mlvalue】:" + mlvalue);

    //lastRは6だが、1行目はタイトルなのでX回繰り返して欲しいため、iがより大きい場合は実行終了とする
    for(var i = 1; i < lastR; i++) {
      Logger.log("【mlvalue[" + i + "][0]】:" + mlvalue[i][0]);
      //mlvalueで取得した値を「内容テンプレ」の宛先にセット
      bTemp.getRange(1, 2).setValue(mlvalue[i][0]);
      Logger.log("【mlvalue[" + i + "][0]】:" + mlvalue[i][1]);
      //mlvalueで取得した値を「内容テンプレ」の担当者名にセット
      bTemp.getRange(2, 2).setValue(mlvalue[i][1]);
      //宛先と担当者名をセットし終わったら送信情報を取得
      var add = mTemp.getRange(1,2).getValue();
      var mailSubject = mTemp.getRange(2,2).getValue();
      var mailBody =mTemp.getRange(3,2).getValue();
      //送信情報をセットして送信!
      GmailApp.sendEmail(add, mailSubject, mailBody);
    }
    Browser.msgBox("送信しました");
  }
  else {
    Browser.msgBox("キャンセルしました");
  }
}

위에서 실행하면 다음 로그가 출력됩니다.
[19-02-03 07:22:59:721 JST] 【lastR】:6
[19-02-03 07:23:15:837 JST] 【mlvalue】:メール,担当者名,[email protected],担当A,[email protected],担当B,[email protected],担当C,[email protected],担当D,[email protected],担当E
[19-02-03 07:23:15:838 JST] 【mlvalue[1][0]】:[email protected]
[19-02-03 07:23:15:840 JST] 【mlvalue[1][0]】:担当A
[19-02-03 07:23:16:253 JST] 【mlvalue[2][0]】:[email protected]
[19-02-03 07:23:16:255 JST] 【mlvalue[2][0]】:担当B
[19-02-03 07:23:16:804 JST] 【mlvalue[3][0]】:[email protected]
[19-02-03 07:23:16:806 JST] 【mlvalue[3][0]】:担当C
[19-02-03 07:23:17:204 JST] 【mlvalue[4][0]】:[email protected]
[19-02-03 07:23:17:206 JST] 【mlvalue[4][0]】:担当D
[19-02-03 07:23:17:665 JST] 【mlvalue[5][0]】:[email protected]
[19-02-03 07:23:17:666 JST] 【mlvalue[5][0]】:担当E

상기 실행하면, 「메일 리스트」에 들어가 있는 메일링 리스트에 대해서 담당자명과 주소가 취득되어, 송신하면 또 다음의 값(담당자명과 주소)을 세트 해 송신을 반복합니다.
반복하는 횟수로서는 「메일 리스트」의 최종 행문 처리를 반복한다고 하고 있습니다.
※표시용의 변수를 준비하면 확실히 「lastR – 1」로 정확한 값 5가 나오는 기술은 용이합니다(웃음)

이것으로 메일 매거진적인 전달도 간단하게 할 수 있네요.
코드의 가독성이거나 지금 공부중이므로 정진합니다 _φ( ̄ー ̄ )

좋은 웹페이지 즐겨찾기