2019年11月3日 星期日

【 .GS】Gmail自動發信串連雲端試算表和google script

用雲端試算表操控Gmail群發電子郵件,原來這麼容易,謝謝google大神

雲端試算表

首先要有一個雲端試算表,我是用下面的試算表來發信

附件的id是在公開pdf共用連結的時候,中間的id亂碼,如下圖/d/到/view 中間,

我分兩個頁籤,第一個頁籤是給發信的時候用的,第二個是給我做運算用的,運算什麼?就是把人名阿,單位阿,信件地址等自動帶入信件裡面,把名單填入第二個頁籤後,回到第一個頁籤用excel公式一次就拉好所有的信件內容了,很懶的話就按我去建立副本

接著我們就要來設定指令碼

執行步驟

  1. 按工具列裡面的【工具】>【指令碼編輯器】,畫面跳到google script編輯器
  2. 把下面的程式碼完整的覆蓋所有內容,並對內容稍做修改,
  3. 完成後按【檔案】>【儲存】
  4. 按【執行】>【執行函式】,第一次執行的時候會要求給予權限,阿都自己寫的,所以就大方的給吧
  5. 在執行的時候會有一個黃色小框框在畫面上,完成以後按【查看】>【紀錄】,可以看到所有寄出的信件標題。我還是會建議在系統最上面還是放一個自己的信箱,確保有正常執行

google script參考程式碼

function mailto() {
  var spreadsheet = SpreadsheetApp.openById('1JpoRVp4CHG40l_owMBeaXnXM0Yaqma5x2osu71xG8Us'),//這邊要換成雲端試算表連結裡的id
   sheet = spreadsheet.getSheetByName('list'),//這邊要換成你的試算表的第一個頁籤的名稱
   lastCol = sheet.getLastColumn(),
   lastRow = sheet.getLastRow(),
   range = sheet.getRange(1,1,lastRow,lastCol),
   Values = range.getValues();
  Logger.log(Values);
  for(var i=1;i < Values.length;i++){
   Logger.log(Values[i][1]);
   var file = DriveApp.getFileById(Values[i][3]),
    file1 = DriveApp.getFileById(Values[i][4]),
    file2 = DriveApp.getFileById(Values[i][5]),
    file3 = DriveApp.getFileById(Values[i][6]);//這邊設置四個附件檔,沒有那麼多的話要自己刪掉,記得最後要用;結尾
    Logger.log(file);
   GmailApp.sendEmail(Values[i][0],Values[i][1],Values[i][2], {
    attachments:[file.getAs(MimeType.PDF),file1.getAs(MimeType.PDF),file2.getAs(MimeType.PDF),file3.getAs(MimeType.PDF)],//這邊設置四個附件檔,沒有那麼多的話要自己刪掉,例如[file.getAs(MimeType.PDF),file1.getAs(MimeType.PDF),file2.getAs(MimeType.PDF)],
    htmlBody:Values[i][2]
    }
   );
  };
}

後記:
1.gs的運轉速度不是很快,google有設定安全的最長執行時間,所以大概一次寄50封就有點極限了
2.gmail有設置一天的發信上限,我寄了差不多一百封就要換帳號了,哈哈