サーチ…


前書き

このサービスを使用すると、ユーザーは電子メールの内容を完全に制御して電子メールを送信できます。 GmailAppとは異なり、MailAppの唯一の目的は電子メールを送信することです。 MailAppはユーザーのGmail受信トレイにアクセスできません。

GmailAppを使用して作成されたスクリプトの変更は、MailAppスクリプトよりもユーザーからの再承認リクエストをトリガーする可能性が高くなります。

基本的なMailAppの例

MailAppはGoogle App Scriptのapiで、メールの送信に使用できます

function sendEmails() {

  var subject = "A subject for your new app!";
  var message = "And this is the very first message"
  var recipientEmail = "[email protected]";

  MailApp.sendEmail(recipientEmail, subject, message);
}  

MailAppクラスは、あなたのGoogleアカウントに基づいて制限されています:

  • コンシューマユーザー(個人用Gmailアカウント):1日あたり100人の受信者
  • Google Apps(従来の)顧客:1日あたり100人の受信者
  • GSuite(基本/ Gov / Edu / Business):1500人/日

MailApp内のメールクォータを確認できます

function checkQuota() {
  Logger.log(MailApp.getRemainingDailyQuota());
}

シートからデータにアクセスする

function getSheetData() {

  var sheet = SpreadsheetApp.getActiveSheet();

  var startRow = 2;  // First row of data to process
  var numRows = 100;   // Number of rows to process
  var startCol = 1;  //First column of data to process
  var numCols = 15;    // Number of columns to process 
  
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}

また、次のように上記の関数を変更して、シートに存在するコンテンツからデータ範囲を動的に取得することもできます。

function getDataSheet() {

  sheet = SpreadsheetApp.getActiveSheet();
   
   //Get data range based on content
  var dataRange = sheet.getDataRange();

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}

シートデータを使用してメールを送信する

与えられた - 払い戻しを要求した従業員のシートを持っています。

要件 - 払い戻しが処理されるときに従業員に電子メールを送信する必要があります

シートは次のようになります:

名前|メールアドレス|払い戻し額|償還は処理されていますか?メールを送信しました

電子メールを送信する機能は次のとおりです。

function getDataSheet() {

  sheet = SpreadsheetApp.getActiveSheet();

  startRow = 2;  // First row of data to process
  numRows = 100;   // Number of rows to process
  startCol = 1;  //First column of data to process
  numCols = 15;    // Number of columns to process 
  
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}    

function getMessage(name, amount) {
  return "Hello " + name + ", Your reimbursement for amount " + amount + " is processed successfully";
}

function sendEmail() {
  
  var emailSent = "Yes";
  var reimbursed = "Yes";
  var emailCol = 5;
      
  var data = getDataSheet();
  
  for (var i = 0; i < data.length; i++) {
    
    var row = data[i];
    
    var isReimbursed = row[3];
    var isEmailSent = row[4];
    var name = row[0];
    var amount = row[2];
    
    if(isReimbursed == reimbursed && isEmailSent != emailSent) {
      
      var subject = "Reimbursement details";
      var message = getMessage(name, amount);
      
      var recipientEmail = row[1];
      
      MailApp.sendEmail(recipientEmail, subject, message);
      
      //Sheet range starts from index 1 and data range starts from index 0
      sheet.getRange(1 + i, emailCol).setValue(emailSent);
    }
  }
}

Rameshのために送られた電子メールはYesです

メールでHTMLコンテンツを送信する

上記の例では、HTMLコンテンツを電子メールのメッセージとして送信する場合は、 [ファイル] - > [新規作成] - > [HTMLファイル]を選択してHTMLファイルを作成します

これでgsファイル以外のHTMLファイルが次のように表示されます。

ここに画像の説明を入力

次に、上の例からgetMessage()メソッドを次のように更新します。

function getMessage(name, amount) {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('Message'); // Message is the name of the HTML file
  
  var message = htmlOutput.getContent()
  message = message.replace("%name", name);
  message = message.replace("%amount", amount);
  
  return message;
}

MailApp APIへの呼び出しも同様に変更する必要があります

MailApp.sendEmail(recipientEmail, subject, message, {htmlBody : message});

コード全体は次のようになります:

function getDataSheet() {

  sheet = SpreadsheetApp.getActiveSheet();

  startRow = 2;  // First row of data to process
  numRows = 100;   // Number of rows to process
  startCol = 1;  //First column of data to process
  numCols = 15;    // Number of columns to process 
  
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}

function getMessage(name, amount) {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('Message');
  
  var message = htmlOutput.getContent()
  message = message.replace("%name", name);
  message = message.replace("%amount", amount);
  
  return message;
}

function sendEmail() {
  
  var emailSent = "Yes";
  var reimbursed = "Yes";
  var emailCol = 5;
      
  var data = getDataSheet();
  
  for (var i = 0; i < data.length; i++) {
    
    var row = data[i];
    
    var isReimbursed = row[3];
    var isEmailSent = row[4];
    var name = row[0];
    var amount = row[2];
    
    if(isReimbursed == reimbursed && isEmailSent != emailSent) {
      
      var subject = "Reimbursement details";
      var message = getMessage(name, amount);
      
      var recipientEmail = row[1];
      
      MailApp.sendEmail(recipientEmail, subject, message, {htmlBody : message});
      
      sheet.getRange(startRow + i, emailCol).setValue(emailSent);
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow