각 수신처에 본문을 맞춤 설정한 이메일을 Google Apps Script(javascript)로 일괄 전송
16487 단어 메일자바스크립트GoogleAppsScript스플릿 시트
배경
계정 이름과 비밀번호를 일괄 배포할 기회가 있었으므로 GAS(Google Apps Script)에서 실시했습니다.
처리 개요
아래 스프레드 시트의 정보를 바탕으로 일괄 메일을 보냅니다.
시트 이름은 "스크립트 데이터"입니다.
완료 플래그가
complete
전송 후 완료 플래그 열을 자동으로 업데이트합니다.처리 흐름
① 스프레드시트에서 데이터 검색
② ①의 데이터를 바탕으로 메일 송신에 필요한 데이터를 작성한다
③ ②에서 작성한 데이터를 사용하여 메일 송신
④ 시트를 갱신한다
이상입니다.
메일 전송에 실패한 경우의 오류 처리는 발신자에게 메일 통지합니다.
소스 코드
▼ 메일 송신
main
function main() {
//申請者向けメール本文;
const EMAIL_BODY_PREFIX = "お疲れ様です。\n下記があなたのアカウントです。\n";
const EMAIL_BODY_SUFFIX = "\n以上になります。よろしくお願いします。";
//スプレッドシート操作クラス;
const sheetDataManager = new SheetDataManager();
//メール送信対象情報を一括取得;
const sheetData = sheetDataManager.getSheetData();
//メール送信対象分メールを送信する
sheetData.forEach((item) => {
try {
//スプレッドシートの「送信完了」フラグ更新
sheetDataManager.updateProcessingStateFlag(item.get("No."),"processing");
MailApp.sendEmail({
to: item.get("宛先"),
cc: item.get("cc"),
bcc: item.get("bcc"),
subject: "アカウントの通知",
body:item.get("宛先名") + EMAIL_BODY_PREFIX + item.get("アカウント") + EMAIL_BODY_SUFFIX,
});
//スプレッドシートの「送信完了」フラグ更新
sheetDataManager.updateProcessingStateFlag(item.get("No."),"complate");
} catch (e) {
//スプレッドシートの「送信完了」フラグ更新
sheetDataManager.updateProcessingStateFlag(item.get("No."),"fail");
MailApp.sendEmail({
to: item.get("送信者"),
subject: "エラー発生報告",
body: "No." + item.get("No.") + " でエラーが発生しました。",
});
}
});
}
▼스프레드시트 데이터 조작 클래스
SheetDataManager
class SheetDataManager {
constructor() {
//スプレッドシート取得
this.spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
this.sheet = this.spreadsheet.getSheetByName("スクリプト用データ");
}
//メール送信対象情報を一括取得
getSheetData() {
const sheetData = new Array();
//入力のある最終行数
const lastRow = this.sheet.getLastRow();
//スプレッドシートの行数分繰り返す
for (let i = 2; i <= lastRow; i++) {
//スプレッドシートから完了フラグを取得
const flag = this.sheet.getRange(i, 8).getValue();
//メール送信が未完了の対象を配列に追加する
if (flag != "complete" && flag != "fail" && flag != "processing") {
//配列に追加する前にMapにまとめる
const singleSheetData = new Map();
//メール本文作成
const userName = this.sheet.getRange(i, 5).getValue() + "さん";
const account = this.sheet.getRange(i, 7).getValue();
//Mapにまとめる
singleSheetData.set("宛先名", userName);
singleSheetData.set("アカウント", account);
singleSheetData.set("No.", this.sheet.getRange(i, 1).getValue());
singleSheetData.set("宛先", this.sheet.getRange(i, 2).getValue());
singleSheetData.set("cc", this.sheet.getRange(i, 3).getValue());
singleSheetData.set("bcc", this.sheet.getRange(i, 4).getValue());
singleSheetData.set("送信者", this.sheet.getRange(i, 6).getValue());
//Mapを配列に追加
sheetData.push(singleSheetData);
}
}
//メール送信が未完了の対象を追加した配列を返す
return sheetData;
}
//スプレッドシートの「送信完了」フラグ更新
updateProcessingStateFlag(num,flag) {
this.sheet.getRange(num + 1, 8).setValue(flag);
}
}
뱀발
실제로는 메일 본문의 커스터마이즈가 좀 더 복잡했지만 생략했습니다.
자바 스크립트를 작성하는 방법으로 이상한 점이 있으면 알려주십시오.
단시간에 작성한 코드입니다만, 문제 없게 동작하므로, 뭔가의 참고로 해 주시면 좋겠습니다.
Reference
이 문제에 관하여(각 수신처에 본문을 맞춤 설정한 이메일을 Google Apps Script(javascript)로 일괄 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Taka5689/items/7636479816df6cc843a4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)