[GAS] G-Drive 自動化 – 客戶互動 001 – 信箱搜集與統一信件發送

【前情提要】

在電子化的世界,電子表單的傳遞性也更加廣泛。那在資料蒐集到時,通常以記錄用戶的電子信箱作為聯絡方式。然而複製貼上每個用戶的電子郵件非常地無聊,在投遞相同內容的信件時也顯得沒效率。

那我們這期將利用 Google Form,從最簡單的收集信箱並寄送統一的信件為主題。

【重點整理】

  1. 電子郵件可以透過 plain-text 或 HTML 形式撰寫
  2. 刪除 Linked Sheet 會自動備份一次 Google Form

【預計內容】

  1. 利用 Google Form 收集信箱
  2. 設定信件內容
  3. 建立 Linked Sheet
  4. 將信件發送給所有人

【主要內容】

1. 利用 Google Form 收集信箱

進到 Google 表單中,在上方的選單選擇 “Settings(設定)”,在 Responses 回應的區塊,將收集 e-mail 改為 Verified 自動收集,或 Responder Input 讓用戶填寫。系統將自動生成欄位紀錄 email 信箱,省去自己設定的步驟。

如果你真的很希望能自訂義欄位的名稱,只能在問題中新增區塊讓用戶填寫,且無法自動收集。

2. 設定信件內容

各位可能覺得 e-mail 文字寫寫就好,但各位是否好奇過為何許多廠商的信件都如此繽紛絢麗?現在的信箱提供商基本都有支援 HTML,也就是最基礎的網頁設計語法,我們簡單證明下就好。

HTML
<h1>Hello!</h1><p>This is a test email with HTML content.</p>

3. 建立 Linked Sheet

在上方的選單中,我們選用在 Responses(回應)的右上角應該能看到 Google Spreadsheet 的標誌,按下後就會建立新的試算表並同步更新表單的回應。

4. 將信件發送給所有人

接下來,才是我們今日的主軸,我們進入到 Linked Sheet 中(比較好管理),我們新增以下的 Google Apps Script。

那因為我的是英文版,各位可能要自己修改下 sheetName 與 columnEmail 兩個參數。這程式碼將利用欄位名稱,逐行掃過 e-mail 並寄送信件。

JavaScript
// Send email to all responsers
function sendEmails() {
  // Name of linked sheet
  var sheetName = 'Form Responses 1';
  // Name for column that store the e-mail
  var columnEmail = 'Email Address';
  // e-Mail Content
  var emailContent = '<h1>Hello!</h1><p>This is a test email with HTML content.</p>';
  // Get the active spreadsheet and sheet
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName(sheetName);

  // Get the data range
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();

  // Find the column index of the 'Email Address' column
  var headers = data[0];
  var emailColumnIndex = headers.indexOf(columnEmail);


  // If the 'Email Address' column is found
  if (emailColumnIndex !== -1) {
    // Start from row 2 to skip headers
    for (var i = 1; i < data.length; i++) {
      var row = data[i];
      var recipient = row[emailColumnIndex];
      try {
        // Send the email
        GmailApp.sendEmail(recipient, 'Hello from BaBaoChou', emailContent, { 'htmlBody': emailContent });

        console.log('Successfully sent email to: ' + recipient);
      } catch (error) { console.error('Failed to send email to: ' + recipient); }
    }
  }
}

那接著我們填寫下表單進行測試吧,可以看到目前有兩個信箱(ps: 希望這 Minecraft 伺服器能開成 ouo)

填寫完成後,讓我們授權並手動執行寄送信件,成功寄送到兩個信箱。如果在 Inbox 沒看到信件不要緊張,由於個人帳號發信有可能被記在 spam 之中,去垃圾郵件翻一下就好。

那打開信件,能看到信件內容,確實有依照 HTML 並形成標題 ~~

那到這邊,我們就成功寄信給所有填表單的用戶了,有需求請再自行新增自訂義選單從 Google Spreadsheet 介面直接呼叫程式碼。

【後話】

但我們的應用並非只有寄送統一郵件,那在客製化信件內容之前,我將以目標客群先做介紹。那下期,我們就會鎖定資料欄位,當符合條件時,才寄信給該名顧客,不再是所有人。

【參考資料】

[1] Class GmailApp — Official Doc
https://developers.google.com/apps-script/reference/gmail/gmail-app#sendEmail(String,String,String,Object)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.