今回はGASを使って、Gmailをスプレッドシートに移すことをやってみます。
Google Apps Scriptが始めての方はこちらを参考にしてください。Google Apps Script 最初の一歩
Gmailの内容をスプレッドシートに移す
スプレッドシートの作成
ドライブから「+新規」→「Google スプレッドシート」をクリックして無題のスプレッドシートを作成
スプレッドシートのIDをコピーしておく
GASの作成
ツールからスクリプトエディターを選んで、以下のコードを書いて(コピー可)ください。
function exportGmails() {
var book = SpreadsheetApp.openById('SpreadSheet IDをここにペーストする');
// <Gmailの検索条件(ここでは2日以内のxxxxxxxxxgmail.comあてのメールを検索)>
var criteria = 'to:xxxxxxxxx@gmail.com newer_than:2d';
var threads = GmailApp.search(criteria);
//スプレッドシートの最初の行の設定
var sheet = book.getActiveSheet();
sheet.getRange(1, 1).setValue('Date');
sheet.getRange(1, 2).setValue('To');
sheet.getRange(1, 3).setValue('From');
sheet.getRange(1, 4).setValue('ReplyTo');
sheet.getRange(1, 5).setValue('Subject');
//Gmailを読み込んで、その都度スプレッドシートに付け加えていく
for (var i = 0; i < threads.length; i++) {
messages = threads[i].getMessages();
message = messages[0];
console.log(message.getFrom());
rowNumber = i + 2;
sheet.getRange(rowNumber, 1).setValue(message.getDate());
sheet.getRange(rowNumber, 2).setValue(message.getTo());
sheet.getRange(rowNumber, 3).setValue(message.getFrom());
sheet.getRange(rowNumber, 4).setValue(message.getReplyTo());
sheet.getRange(rowNumber, 5).setValue(message.getSubject());
}
}
実行
コードを保存してから実行をクリック
初回起動時は、「承認が必要です」というダイアログが表示される。
「権限を確認」をクリックしてください。
このようにできたら成功です。
スプレッドシートにある複数の宛先にメールする
今度はスプレッドシートにあるメールアドレスのリスト先にGASをつかってメールすることをやってみます。
スプレッドシートの準備
1行目はメールの項目の行とします。
A列 | 氏名 |
B列 | メールアドレス |
C列 | 件名 |
D列 | メール本文 |
E列 | 送信済み |
このようなリストを作成しています。
GASの作成
スプレッドシートの中に本文を入れる場合
拡張機能からApps Scriptを選んで、以下のコードを書いて(コピー可)ください。
この場合は、送る相手によって件名やメール本文が異なっても、同時に送信することができます。
function sendEmails() {
//スプレッドシートのAppの呼び出し
var sheet = SpreadsheetApp.getActiveSheet(); //アクティブなシートの取得
var EMail_SENT = "送信済み";
var lastrow = sheet.getLastRow(); //シートの最終行の取得
var lastcolumn = sheet.getLastColumn(); //シートの最終列の取得
var dataRange = sheet.getRange(2,2,lastrow-1,lastcolumn-1) //2行目2列目から最終の行と列まで選択
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[0]; //B列
var message = row[2]; //D列
var emailSent = row[3]; //E列
if (emailSent != EMail_SENT) { //送信済みの有無を確認
var subject = row[1];//C列
MailApp.sendEmail(emailAddress, subject, message); //メールを送信
sheet.getRange(2 + i,lastcolumn).setValue(EMail_SENT); //E列を送信済みにする
SpreadsheetApp.flush(); //変更を即反映させる
}
}
}
コードの中に、件名やメールの本文を入れる場合
下記のようにすると、スプレッドシートの中の件名やメッセージでなく、コードの中の件名やメッセージが送信されます。
”\n”は改行です。これがないと、文がずっと続いてしまいます。
function sendEmails() {
//スプレッドシートのAppの呼び出し
var sheet = SpreadsheetApp.getActiveSheet(); //アクティブなシートの取得
var EMail_SENT = "送信済み";
var lastrow = sheet.getLastRow(); //シートの最終行の取得
var lastcolumn = sheet.getLastColumn(); //シートの最終列の取得
var dataRange = sheet.getRange(2,2,lastrow-1,lastcolumn-1) //2行目2列目から最終の行と列まで選択
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[0]; //B列
var message = '経理課の皆様へ\n 明日は、忘年会です。定時で仕事が終わるようにおねがいします。\n 場所は先日のメールでお知らせしたお店です。'; //D列
var emailSent = row[3]; //E列
if (emailSent != EMail_SENT) { //送信済みの有無を確認
var subject = '忘年会のお知らせ';//C列
MailApp.sendEmail(emailAddress, subject, message); //メールを送信
sheet.getRange(2 + i,lastcolumn).setValue(EMail_SENT); //E列を送信済みにする
SpreadsheetApp.flush(); //変更を即反映させる
}
}
}
コードの実行
最初に実行する際、権限を確認のメッセージが出てきます。
「権限を確認」をクリックしてください。
うまくいけば、実行ログは下記のようになります。
実際にメールが送信されたかは、Gmailの送信済みで確認してください。