GmailAppでメール送信する

Google Apps Scriptには、メール送信機能を持つオブジェクトが2種類あります。1つは「MailApp」オブジェクト、もう1つが「GmailApp」オブジェクトです。

MailAppは、基本的に「メールを送信する機能だけのオブジェクト」で、簡単にメールを送るために用意されているサービスです。これに対し、GmailAppは、Gmailアプリを操作するためのオブジェクトです。メール送信だけでなく、Gmailに関する様々な機能が用意されています。

MailAppも、実際の送信にはGmailを利用しますから、「どちらを使っても同じ」と考えていいでしょう。本連載では、第2~4回でMailAppを使ったメール送信を使いました。今度は、GmailAppでのメール送信について説明しましょう。

GmailAppでのメール送信は、「sendEmail」メソッドを使います。これは以下のように利用します。

GmailApp.sendEmail( 送信先 , タイトル , コンテンツ , オプション );

送信先、タイトル、コンテンツはすべてテキストで指定します。最後のオプションは、その他に必要な情報をオブジェクトにまとめたものを用意します。

ではオプションの利用例として、HTMLメールの送信を行うサンプルを作成してみましょう。


function sendHTMLMail(){
  var from = "…送信元…"; //★
  var to = '…送信先…'; //★
  var title = 'HTMLメールを送る';
  var content = '

Hello!

これはサンプルで用意したメッセージです。

'; var err_content = 'テキストのメールを送ります。'; var options = { from: from, htmlBody:content, }; // HTMLメールを送信 GmailApp.sendEmail(to, title, err_content, options); }

リストの変数fromtとtoにそれぞれの利用するメールアドレスを指定して下さい。実行すると、HTMLメールを指定アドレスに送信します。

ここでは、オプション情報として以下のプロパティを持ったオブジェクトを用意しています。

from――送信元のアドレスを指定します。

htmlBody――HTMLメールのコンテンツ(HTMLソースコード)をテキストで指定します。

このhtmlBodyを用意すると、sendEmailの引数に指定したコンテンツは表示されず、htmlBodyの内容が表示されるようになります。

  • senHTMLMailでHTMLのメールを送信できる

イメージを添付してメール送信!

HTMLメールとオプションを利用することで、イメージファイルを組み込んだメールも送ることができます。これは、HTMLへのタグと、オプション用オブジェクトへのイメージデータの追加で実現できます。

タグの用意
<img src="cid:イメージ名" >

・オプションに用意する値
inlineImages:{ イメージ名 : Blobデータ, イメージ名 : Blobデータ, ……}

HTMLメールでは、イメージの表示にタグを利用することができます。このとき注意したいのは、srcの指定です。[cid:〇〇」というように、イメージ名の前に「cid:」を付ける必要があります。

メールに添付するイメージデータは、オプション用のオブジェクトに「inlineImages」というプロパティとして用意します。これはオブジェクトとして値を用意します。オブジェクトには、イメージ名のプロパティにイメージデータを設定しておきます。例えば、inlieImages:{image1:〇〇}とオプションを用意しておいたなら、とすることでそのイメージを表示することができる、というわけです。

Googleドライブからイメージデータを取り出す

ここで重要なのは、「イメージデータはBlob(Binary Large Object)形式にしておく」ということです。Blobはデータベースなどでバイナリデータを扱うのに用いられるデータ型です。

このBlobデータを用意する最も簡単な方法は、Googleドライブのファイルを利用することでしょう。例えば、指定したファイル名のBlobデータを取得する関数を考えてみましょう。


function getImage(fname){
  var files = DriveApp.getFilesByName(fname);
  var file = files.next();
  return file.getBlob();
}

Googleドライブは、DriveAppというオブジェクトを使って操作することができます。getFilesByNameメソッドは、引数に指定した名前のファイルを取り出すものです。得られる値はFileIteratorというオブジェクトで、ここからnextを呼び出すことで次々にFileオブジェクトを取り出すことができます。

取り出されたFileオブジェクトから「getBlob」メソッドを呼び出すことで、そのファイルのBlobデータを取り出すことができます。

スプレッドシートをもとにHTMLメールを送信

では、イメージを添付してメールを送信する簡単なサンプルを作成しましょう。これは、Googleスプレッドシートのスクリプトです。ここでは、上記のgetImage関数を利用しているので、必ず記述しておいて下さい。



function sendMailWithImages(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var mail = sheet.getRange(1, 1).getValue();
  var title = sheet.getRange(2, 1).getValue();
  var name = sheet.getRange(3, 1).getValue();
  var last = sheet.getLastRow();
  var html_content = '

' + name + '様

'; var plain_content = name + '様\n'; var imgs = {}; for(var i = 4;i <= last;i++){ var s = new String(sheet.getRange(i, 1).getValue()); if (s.indexOf('.jpeg') > 0 || s.indexOf('.png') > 0){ html_content += '
'; html_content += ''; html_content += '
' + s + '
'; html_content += '
'; imgs['img' + i] = getImage(s); } else { html_content += '

' + s + '

'; plain_content += s + '\n'; } } var options = { htmlBody:html_content, inlineImages:imgs }; GmailApp.sendEmail(mail, title, plain_content, options); }

これは、スプレッドシートのA列から必要な情報を読み込んでメールを作成し送信するサンプルです。スプレッドシートでは、A列に以下のような形で情報を記述しておきます。

送信アドレス
タイトル
本文のタイトル
本文テキスト
……略……

  • スプレッドシートにメールの内容を記述する

メールの本文は、A3以降に必要なだけ記述します。書かれたテキストは、各セルごとにパラグラフとしてまとめられた状態で表示されます。

イメージを挿入する場合は、セルに「〇〇.png」というようにファイル名を記述します。ファイルは、.pngと.jpegの2つの拡張子に対応しています。例えば「sampe.png」と記入すれば、Googleドライブからsample.pngを検索してそれを挿入します。実際に試してみれば、簡単にイメージ入りのHTMLメールを送れることがわかるでしょう。

  • 送信されたメール。イメージが埋め込まれて表示される。