GAS Sample_スプレッドシート上で宛先を選択しメール送信(その3)
前回までスプレッドシート上で宛先を選択しメール送信する手順を記しました。
スクリプトでは「メール送信」「下書き作成」のメニューを実装していますが、同様の内容が重複したスクリプトが2つあり長いので、構造をシンプルにします。
前回のスクリプトはこちら。
function sendMail(){
//スプレッドシート、および各シートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = ss.getSheetByName('list')
const mailSheet = ss.getSheetByName('mail')
//mailSheetのセルB1-B2から件名、本文を取得
const subject = mailSheet.getRange(1, 2).getValue();
const body = mailSheet.getRange(2, 2).getValue();
//listSheetの最終行を取得、メアドを格納する変数recipient,cc,bccを準備
const lastRow = listSheet.getLastRow();
let recipient = '';
let cc = '';
let bcc = '';
//listSheetの列A-Cにチェックが入っていたらメアドを追加
for(let i = 2 ;i <= lastRow ; i++){
const checkTo = listSheet.getRange(i, 1).getValue();
const checkCc = listSheet.getRange(i, 2).getValue();
const checkBcc = listSheet.getRange(i, 3).getValue();
const address = listSheet.getRange(i, 5).getValue();
if(checkTo == true){
recipient += address + ',';
}
if(checkCc == true){
cc += address + ',';
}
if(checkBcc == true){
bcc += address + ',';
}
}
// メール送信
GmailApp.sendEmail(recipient, subject, body, {cc:cc, bcc:bcc});
}
function createDraft(){
//スプレッドシート、および各シートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = ss.getSheetByName('list')
const mailSheet = ss.getSheetByName('mail')
//mailSheetのセルB1-B2から件名、本文を取得
const subject = mailSheet.getRange(1, 2).getValue();
const body = mailSheet.getRange(2, 2).getValue();
//listSheetの最終行を取得、メアドを格納する変数recipient,cc,bccを準備
const lastRow = listSheet.getLastRow();
let recipient = '';
let cc = '';
let bcc = '';
//listSheetの列A-Cにチェックが入っていたらメアドを追加
for(let i = 2 ;i <= lastRow ; i++){
const checkTo = listSheet.getRange(i, 1).getValue();
const checkCc = listSheet.getRange(i, 2).getValue();
const checkBcc = listSheet.getRange(i, 3).getValue();
const address = listSheet.getRange(i, 5).getValue();
if(checkTo == true){
recipient += address + ',';
}
if(checkCc == true){
cc += address + ',';
}
if(checkBcc == true){
bcc += address + ',';
}
}
//下書き
GmailApp.createDraft(recipient, subject, body, {cc:cc, bcc:bcc});
}
function onOpen(){
SpreadsheetApp.getUi()
.createMenu('スクリプト')
.addItem('メール送信', 'sendMail')
.addItem('下書き作成', 'createDraft')
.addToUi();
}
自力で調べて書き換えようトライしてみましたが上手くいかず、所属しているコミュニティの方に教えていただきました。ありがとうございました。
書き換えたスクリプトはこちら。
function createMailData(doSend){
//スプレッドシート、および各シートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = ss.getSheetByName('list')
const mailSheet = ss.getSheetByName('mail')
//mailSheetのセルB1-B2から件名、本文を取得
const subject = mailSheet.getRange(1, 2).getValue();
const body = mailSheet.getRange(2, 2).getValue();
//listSheetの最終行を取得、メアドを格納する変数recipient,cc,bccを準備
const lastRow = listSheet.getLastRow();
let recipient = '';
let cc = '';
let bcc = '';
//listSheetの列A-Cにチェックが入っていたらメアドを追加
for(let i = 2 ;i <= lastRow ; i++){
const checkTo = listSheet.getRange(i, 1).getValue();
const checkCc = listSheet.getRange(i, 2).getValue();
const checkBcc = listSheet.getRange(i, 3).getValue();
const address = listSheet.getRange(i, 5).getValue();
if(checkTo == true){
recipient += address + ',';
}
if(checkCc == true){
cc += address + ',';
}
if(checkBcc == true){
bcc += address + ',';
}
}
//doSendがtrueならメール送信、falseなら下書き作成を実行
if (doSend) {
GmailApp.sendEmail(recipient, subject, body, {cc:cc, bcc:bcc}); //送信
} else {
GmailApp.createDraft(recipient, subject, body, {cc:cc, bcc:bcc}); //下書き
}
}
function sendMail() {
//誤操作による誤送信防止のためにメッセージボックスを実装
if (Browser.msgBox('メール送信しますか?', Browser.Buttons.OK_CANCEL) == 'cancel') {
return;
}
createMailData(true);
}
function createDraft() {
createMailData(false);
}
function onOpen(){
SpreadsheetApp.getUi()
.createMenu('スクリプト')
.addItem('メール送信', 'sendMail')
.addItem('下書き作成', 'createDraft')
.addToUi();
}
「メール送信」なら'true'、
「下書き作成」なら'false'を関数createMailDataに渡して実行します。
また、関数sendMailでは意図せず「メール送信」メニューをクリックした場合に備え、
if (Browser.msgBox('メール送信しますか?', Browser.Buttons.OK_CANCEL) == 'cancel') {
return;
}
としてメッセージボックスを実装しました。
誤って操作した場合は「キャンセル」を押下するとメール送信はされずスクリプトが終了します。
この記事が気に入ったらサポートをしてみませんか?