web-dev-qa-db-ja.com

署名用の画像を含むGoogleスプレッドシートからの電子メールで、メッセージのフォーマットを取り出します

Googleスプレッドシートからメールを送信するコンパイル済みのテキスト(改行付き)がvarメッセージに保存されています。私は署名のために写真を含めようとしてきました。それを表示するために、optionsパラメーターでHTML本体を使用しました(提案されているように here )。これはコードです:

function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(1, 2);  // Fetch the range of cells B1:B1
var subject = range.getValues();   // Fetch value for subject line from above range
var range = sheet.getRange(1, 9);  // Fetch the range of cells I1:I1
var numRows = range.getValues();   // Fetch value for number of emails from above range
var startRow = 4;                  // First row of data to process
var dataRange = sheet.getRange(startRow, 1, numRows,9 ) // Fetch the range of cells A4:I_
var data = dataRange.getValues();  // Fetch values for each row in the Range.
var googleLogoUrl = "http://die-masterarbeit.de/media/grafik/logo.png";
var googleLogoBlob = UrlFetchApp
                     .fetch(googleLogoUrl)
                     .getBlob()
                     .setName("googleLogoBlob");
for (i in data) {
var row = data[i];
var emailAddress = row[0];      // First column
var message = row[8];           // Ninth column

MailApp.sendEmail(emailAddress,
             subject,
             message,
{
name: 'Peter Peschel',
htmlBody: "<img src='cid:googleLogo'>",
inlineImages:
  {
    googleLogo: googleLogoBlob,
  }
})};
}

起こるのは、メッセージ変数がまったく表示されないことです。私はhtmlbodyのメッセージ変数を再度呼び出すことを実験しましたが、これはメッセージのフォーマット(特に改行)を完全に取り除きます。

MailApp.sendEmail(emailAddress,
             subject,
             message,
{
name: 'Peter Peschel',
htmlBody: message + "<img src='cid:googleLogo'>",
inlineImages:
  {
    googleLogo: googleLogoBlob,
  },
})};
}

メッセージのフォーマットを維持しながら画像を最適に表示する方法に関する提案はありますか?

2
martrein

MailApp.sendEmail メソッドのsendEmail(recipient, subject, body, options)形式を使用しています。ドキュメントにあるように、オプションにhtmlBodyが含まれる場合は、それが使用されます代わりに bodyパラメーター。これが、あなたの最初の試みが「メッセージ」を無視した理由です。

HTMLメッセージを送信する必要があるため、そのコンテンツはHTMLとしてフォーマットする必要があります。特に、改行は制御文字<br>ではなく\nにする必要があります。

解決策:メッセージ本文で\n<br>に置き換えます。セルA1のコンテンツを送信するスクリプトの例を次に示します。受信者の電子メールクライアントがHTMLをレンダリングしない場合にplainMessageを提供し、インラインイメージでhtmlMessageを提供します

function sendA1() {
  var plainMessage = SpreadsheetApp.getActiveSheet().getRange(1,1).getValue();
  var htmlMessage = message.replace(/\n/g, '<br>') + "<img src='cid:googleLogo'>"; 
  MailApp.sendEmail('[email protected]', 'my subject', plainMessage, { 
    htmlBody: message,
    inlineImages:
      {
        googleLogo: googleLogoBlob 
      }       
  }); 
}

ところで、オプションを広範囲に使用しているので、形式 sendEmail(message) に切り替えるのは理にかなっています。ここで、messageはすべてのパラメーターを保持するオブジェクトです。これにより、コードが読みやすくなります。

MailApp.sendEmail({
  to:       '[email protected]', 
  subject:  'my subject', 
  body:     plainMessage, 
  htmlBody: message,
  inlineImages:
    {
      googleLogo: googleLogoBlob 
    }
}); 
1
user79865