Steven's Blog

苟孟的廢文小天地

0%

如何使用GoogleAppScript(GAS)製作自動寄信的API

Google Apps Script(GAS)網站

Google Apps Script 是速度飛快的應用程式開發平台,可讓您輕鬆地建立與Google Workspace整合的商業應用程式。您在新式 JavaScript 中編寫程式碼,並可存取 Gmail、日曆、雲端硬碟等常用 Google Workspace 應用程式。無須安裝任何程式碼,直接在瀏覽器中提供程式碼編輯器,並讓指令碼在 Google 伺服器上執行。

首先我們先到GAS網站建立一個新專案
Imgur

GAS支援HTML、CSS和JavaScript,不用再多學習一種新的專屬架構,所以直接用JavaScript語法來寫就好。

重點語法

程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
function doPost(e) {
const params = e.parameter;
const mail = params.mail;
const orderInfo = params.orderInfo
sendEmail(mail,orderInfo);
return ContentService.createTextOutput("完成");
}

function sendEmail(mail,orderInfo) {
const html = "您訂購的餐點為:" + orderInfo;
const subject = "今天吃甚麼?";
GmailApp.sendEmail(mail, subject, html);
}

基本上的語法都和JavaScript差不多,不過有以下幾個比較特別的地方:

  1. doPost(e) 代表使用post方法請求;如果要用get方法,則是使用doGet()e 則是代表傳進來的參數。
  2. ContentService.createTextOutput 表示創造一個純文本內容,可以用來當作GET和POST請求的回應。詳情可參考ContentService
  3. GmailApp.sendEmail(),可以操作Gmail寄信,sendEmail的參數為(recipient, subject, body, options),依序表示:收件人、主旨、內容以及其他進階的參數,詳情可參考MailApp

完成Code之後可以先測試看看能不能運行,我們建立一個debug.gs檔案:
Imgur

deBug

程式碼如下:

1
2
3
4
5
6
7
8
9
function debug() {
var Result = doPost({
parameter: {
"mail": "XXXXXXXX@gmail.com",
"orderInfo": "鹹酥雞*1"
},
});
Logger.log("Result: %s", Result);
}

然後按下執行,便會顯示執行結果
Imgur
如果無誤的話會看到執行完畢的通知,並且在信箱內可以收到剛剛寄的信
Imgur

部署

接著到右上角的部署->新增部署作業,設定網頁應用程式,執行身分為 並設定 所有人 可以存取,

然後按下部署,之後頁面會跳轉至應用程式的授權頁面,代表你授權GAS操作你的gmail。

部署完成之後,複製網頁應用程式網址
Imgur

然後就可以透過這網址串接API囉~

備註

當初在串接API時,原本是透過axios的方式串接,但卻一直跳出CORS的問題,而改用Jquery的$ajax之後卻沒有這個問題。
經過各種爬文之後,我猜測是axios預設的 ‘content-type’:‘application/json 會傳送預檢請求,而$ajax預設的’content-type’:‘application/x-www-form-urlencoded’ 則不會傳送預檢請求,不過即使我設定axios的content-type跳出錯誤,這邊先挖一個坑,待之後對於CORS政策更加了解時再回來填這個坑。
參考文章
stackoverflow