Google Apps Script Gmailとスプレッドシートの連携

GAS

今回は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の送信済みで確認してください。

タイトルとURLをコピーしました