スプレッドシートからメールを一斉送信するGAS
スプレッドシート(Googleスプレッドシート)上にあるメールアドレス一覧へメールを一斉送信するGoogleAppsScriptを作成します。
1. スプレッドシートを用意
メールアドレス一覧のスプレッドシートを作成します。
注意点
- メールアドレスのセルには他の文字が入らないようにしましょう。
- メールアドレス一覧の列には下に余計な内容が入力されていないようにしましょう。
2. GASエディターを起動
今回はスプレッドシートに紐づいたGASを作成します。
スプレッドシートに紐づかないGASの作成については後日記載する予定です。
スプレッドシートに紐づいたGASの作成方法
1.スプレッドシートの [ツール] ⇒ [スクリプトエディタ] を選択
2.Google Apps Scriptのウィンドウが開きます
3. GASのコーディング
実際にスクリプトを作成していきます。
(1) シートオブジェクトの取得
紐づいているスプレッドシート自体を取得したのち、そのスプレッドシート内の、メールアドレス一覧が書き込まれているシートをオブジェクトとして取得します。
(取得したオブジェクトは「sheet」という定数を宣言し、その中に格納します。)
定数とは:
const 定数名
で宣言する、宣言のあとに代入不可なデータです。
今回取得したシートのオブジェクトは値や文字列のような一時的な格納データではなく、以降変更されないオブジェクトなので定数に格納しています。
今回の例ではシート名の「アドレス帳」を用いて取得します。
※シートオブジェクトの取得方法にはこれ以外にも様々な方法があります
function main() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('アドレス帳');
}
(2) メールアドレスの取得
①
定数firstRow
と定数mailCol
を宣言します。これもこの後情報が変わることのない値なので定数で作成しています。
シートの4行目からデータが始まっているので、firstRow
に4を指定します。
メールアドレスの情報はC列にあるので、mailCol
にC列を意味する3を指定しておきます。
②
シート内でデータのある最終行を取得できる.getLastRow()
メソッドを用いてデータ数(行数)を取得します。
今回の例:【 最終行(8行目) – ( 開始行(4行目) – 1 ) ⇒ データ数(5行分)】
③
メールアドレスを格納する配列mailaddressList
を用意します。
④
For文を用いてメールアドレスを1つずつmailaddressList
に追加します。
function main() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('アドレス帳');
// 1
const firstRow = 4; //データの開始行(=今回は4行目)
const mailCol = 3; //メールアドレスの列(=今回はC列)
// 2
var rowLength = sheet.getLastRow() - (firstRow - 1);
// 3
var mailaddressList = [];
// 4
for(let i=0; i < rowLength; i++){
let address = sheet.getRange(firstRow + i, mailCol).getValue();
mailaddressList.push(address);
}
}
(3) メールの内容の作成、送信
今回、メールの作成と送信には別のfunctionを作成して実行します。subject
で件名、body
で本文を作成します。(本文内容は例です)
GmailApp.sendEmail(address, subject, body)
メソッドでメールを送信します。
※今回の内容ではメールの送信元はスクリプトを実行したアカウントのメールアドレスになります。
送信元を指定したい場合は GmailApp.sendEmail(address, subject, body, options)
を使用します。
送信元指定ほかオプションの詳細についてはこちらを参照。
function sendMailToAll(address) {
const subject = '【全体連絡】システム休止日について'; // メールの件名
const body = `
社員の皆さま
総務部より社内システム休止日についてお知らせです。
社内システムの入れ替えに伴い、20XX年〇月〇日は終日社内システムが休止となります。
関係部署においては業務調整をよろしくお願いいたします。
詳細内容については社内イントラに掲示していますので、ご一読ください。
https://〇〇〇〇〇〇〇〇〇〇〇/
各種問い合わせは部門内で取りまとめの上、総務部までお願いいたします。
総務部 社内システム担当 〇〇
内線:000-000-0000
`;
GmailApp.sendEmail(address, subject, body);
}
4. アドレスの有無を確認して実行
1.で作成したfunction main()
にアドレス有無の判定と、2.で作成したメール作成送信関数の呼び出しを追記します。forEach
でmailaddressList
を順に実行し、address内容が空でない場合のみメール作成・送信を実行します。
function main() {
// ----これまでの内容----
// 宛先ごとにメール作成、送信
mailaddressList.forEach(address => {
// メールアドレスがある場合、実行
if(address != ''){
sendMailToAll(address);
}
});
}
完成
下記のコードが最終的な内容です。
function main() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('アドレス帳');
const firstRow = 4; //データの開始行(=今回は4行目)
const mailCol = 3; //メールアドレスの列(=今回はC列)
var rowLength = sheet.getLastRow() - (firstRow - 1);
var mailaddressList = [];
// メールアドレスリスト取得
for(let i=0; i < rowLength; i++){
let address = sheet.getRange(firstRow + i, mailCol).getValue();
mailaddressList.push(address);
}
// 宛先ごとにメール作成、送信
mailaddressList.forEach(address => {
// メールアドレスがある場合、実行
if(address != ''){
sendMailToAll(address);
}
});
}
function sendMailToAll(address) {
const subject = '【全体連絡】システム休止日について'; // メールの件名
const body = `
社員の皆さま
総務部より社内システム休止日についてお知らせです。
社内システムの入れ替えに伴い、20XX年〇月〇日は終日社内システムが休止となります。
関係部署においては業務調整をよろしくお願いいたします。
詳細内容については社内イントラに掲示していますので、ご一読ください。
https://〇〇〇〇〇〇〇〇〇〇〇/
各種問い合わせは部門内で取りまとめの上、総務部までお願いいたします。
総務部 社内システム担当 〇〇
内線:000-000-0000
`;
GmailApp.sendEmail(address, subject, body);
}
実行結果(送付メール)
まとめ
今回の例ではアドレス帳内の全員に同じ内容のメールを送る単純なスクリプトを作成しました。
ここから、メール本文内に送付先の名前を入れたり、特定の所属部門の人にだけ送信したり、メールに返信不可設定やCCに任意のアドレスを追加したり、メールの件名や本文をスプレッドシートから取得したりと様々な応用ができます。
上記の内容についても今後記事を追加していきたいと思います。