Google Apps Script - GMail Inline Image

最近剛好有需求要做Mail Parser,主要是需要把Mail附件拿來做些處理,Google Apps Script其實在這部份已經做的很棒,詳細可以查詢GmailApp,其中Inbox對於Gmail來說就像是個郵件盒,每個郵件盒中有很多的郵件(GmailMessage),每封郵件內可能還會夾帶著附件(GmailAttachment),相同一系列的郵件(就是一直Re: Fwd:)這些郵件會變為一個郵件串(GmailThread),你可以針對每一個郵件串(GmailThread)貼上標籤(GmailLabel)來分類,這就是在Google Apps Script中所分的幾個大分類。

  • GmailApp:Gmail
  • Inbox:Gmail 的Inbox
  • GmailThread:郵件串
  • GmailLabel:郵件串的標籤
  • GmailMessage:郵件
  • GmailAttachment:郵件附件

對於基本的GMail該有的功能幾乎是都有了,但對於Inline Image似乎沒有辦法取得,既不在Mail body也不在attachment中,但這圖片確實可以出現在Gmail中,從Mail Body只會取得一個連結,但這連結必須要Google login session才可以拿到,在Google apple script沒辦法直接用curl來login,所以開始了找尋新的一條路...最後發現在RawContent中其實有夾帶著Inline Image,是用base64 encode的binary,重點就是要把這些Parse出來decode轉成blob,就可以自由的使用,但在parse過程中遇到很多問題,現在的Mail server種類很多,Mail client更是多...每一個上傳過來的多少都有點落差,在這邊判斷這東西實在很麻煩,所以目前採用了一種方式解決,把所有收到的Email 再轉寄到另一個Gmail,這樣就可以保證收到的Mail全部都是Google 格式,也因此parse只要寫一種(GMail)即可。

如果有興趣使用可以直接Import,project key「MexeYVcutPEfH4PE_lTdUTQ1vcfzwSFZI

使用方式 sample
//只要使用下面這行就會回傳inline image的Array(blob array)
Mail.getGmailInlineAttachments(gmailMessage)


相關連結
source code - https://script.google.com/d/1S9W3czqvmbE20rXUMrZogPz3ij54CudfU7ugIVAKmTU0-U9Nw2k4xNFH/edit
Google Apps Script Gmail - https://developers.google.com/apps-script/service_gmail

Google Apps Script - SpreadSheet Library

前一篇有講過Google Apps Script - SpreadSheet,在使用Google 提供的Library還是感覺有些常用的東西沒有,所以就自己寫了個Library把幾個常用的整理起來。加入Library的使用方式如下:

Project Key「MDu1zmJTs8tZwFGuAKerzvA1vcfzwSFZI

Step1. Resource >> Manage libraries



Step2. 輸入Project Key「MDu1zmJTs8tZwFGuAKerzvA1vcfzwSFZI
成功Input後可以選擇所需要的版本、觀看文件,以及此Library在自己的Project中代表的變數名稱



Step3. Save

完成後就可以直接來使用,開始呼叫任何一個function前記得要先呼叫「initWithSpreadsheetId」,先把Id設定好後所有的function才可以使用,Library列表如下
  • initWithSpreadsheetId:設定要存取哪一個SpreadSheet
  • getSheets:取得SpreadSheet內所有的Sheet
  • getSheet:取得SpreadSheet內取得指定的的Sheet
  • getColumn:取得Sheet內一整欄的資料
  • getColumnIndex:取得Sheet內第一欄的文字位置
  • getRow:取得Sheet內一整行的資料
  • getAllRows:取得Sheet內所有的資料

Project Key「MDu1zmJTs8tZwFGuAKerzvA1vcfzwSFZI

相關連結
Google Apps Script - https://developers.google.com/apps-script/
Google Apps Script SpreadSheet - https://developers.google.com/apps-script/class_spreadsheetapp