【Google Apps Script (GAS)】Scriptからメールを送信する方法と全9オプションの設定方法を解説!

2021年4月24日

Google Apps Scriptからメールを送信するというのは、よく利用する機能かと思いますが、オプションが設定できることをご存知でしょうか?

Scriptでメールが送信できるのはいいんだけど、CcやBccの設定や添付ファイルの送り方はどう設定すればいいの?
と思う方も多いかと思います。

  • オプション設定でどんなことができるのか
  • オプションで設定するのは分かったけど、具体的にどのように設定したらいいのか

例えばCcやBccにメールアドレスを設定したい時やファイルを添付したい時にはオプションで設定する必要があります。

オプションに関する設定方法はGoogleの公式リファレンスにも一部しか載っておらず、具体的にどのように設定すれば良いかは実装者が考えるしかない状態です。
(しかも、javaScriptのオブジェクトで渡す必要があるため、ある程度プログラムの知識が必要です)

Google Apps Scriptに4年間触れいると、メール送信は頻繁に使います。
オプションの設定方法は知っておいた方がいいかなと思って、全てのオプションに関して設定方法と実際のコードと合わせてメモしています(コードは軽くテストしています)。

この記事では、Google Apps Scriptからメール送信方法と全てのオプション設定について、実際のコード付きで解説していきます。

この記事を読むことでGoogle Apps Scriptからのメール送信を完璧に使いこなすことができます。

Scriptからメールを送信する方法

まずはメール送信方法の基本から。
Google Apps Scriptのメール送信はGmailAppオブジェクトを使用します。
GmailAppオブジェクトのsendEmailメソッドに「宛先のメールアドレス」、「件名」、「本文」を設定することで送信できます。

GmailApp.sendEmail(宛先, 件名, メール本文);

実際のコードは下記の通りです。

function myFunction() {
    var to = "mike@example.com";       // ★宛先
    var subject = "send mail test";    // ★件名
    var body = "This is test."         // ★メール本文

    GmailApp.sendEmail(to, subject, body);
}

オプションを設定する方法

ここからはオプション設定について解説していきます。

オプションの設定方法を解説する前に、どんなオプションが設定できるのかを確認しようと思います。
Cc、Bccやファイルを添付するなど日常的に使う設定やHTMLメールなどメルマガなどで使うような設定もできます。

使えるオプションは下の表の通りで、こちらはGoogleの公式リファレンスに載っています(英語です)。

オプション名タイプ
(設定する値の型)
内容説明
attachmentsBlobSource[]電子メールで送信するファイルの配列。
bccStringBCCへの電子メールアドレスのコンマ区切りリスト。
ccStringCCへの電子メールアドレスのコンマ区切りリスト。
fromString電子メールの送信元アドレス。
getAliases()によって返される値のいずれかである必要があります。
htmlBodyString設定されている場合、HTMLをレンダリングできるデバイスは、必要なbody引数の代わりにHTMLを使用します。
inlineImagesObject画像キー(String)から画像データ(BlobSource)へのマッピングを含むJavaScriptオブジェクト。
これは、htmlBodyパラメーターが使用され、これらの画像への参照が<img src = “cid:imageKey" />の形式で含まれていることを前提としています。
nameString電子メールの送信者の名前(デフォルト:ユーザーの名前)。
noReplyboolean受信者が電子メールに返信しないように、一般的な返信なしの電子メールアドレスから電子メールを送信する場合はtrue。
このオプションは、G Suiteアカウントでのみ使用でき、Gmailユーザーでは使用できません。
replyToStringデフォルトの返信先アドレスとして使用するメールアドレス(デフォルト:ユーザーのメールアドレス)。
設定できるオプション

Cc、Bccを設定する

Cc、Bccは通常のメールでもよく利用します。
To、Cc、Bccに設定する宛先はビジネスメールでは常識となっていますが、自動化したとしてもそれは変わらないです。

なので利用するケースによっては、メールのToは読んでほしい人、Ccは関係者に設定したい場合にはオプションに設定する必要が出てきます。

具体的な設定方法はこちらです。

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var option = {
    cc:'bob@example.com',
    bcc:'catherine@example.com'
  };
  MailApp.sendEmail(to, subject, message, option);
}

ccプロパティはCcに設定したい宛先、bccプロパティはBccに設定したい宛先を設定します。
複数人設定したい場合は、’bob@example.com,catherine@example.com’のようにコンマ(,)で区切りで設定します。

attachmentsオプションで添付ファイルを設定する

attachmentsオプションは添付ファイルをつけることができます。

添付するファイルを配列の形式で設定してあげます。
Google Apps Scriptの配列については、通常のJavaScriptの配列と同じなので、Web検索するとすぐに出てくると思います。
公式の情報が知りたい時はMDN公式リファレンスに詳しく載っています。

attachmentsのオプションをつける例

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';
  var fileId = 'abcdefghijklmnopqrstuvwxyz';  // ★添付するファイルのファイルID

  var file = DriveApp.getFileById(fileId);
  var option = {
    attachments: [file.getAs(MimeType.PDF)]
  };
  GmailApp.sendEmail(to, subject, message, option);
}

DriveApp.getFileById(fileId)で添付するファイルを取得します(添付ファイルはGoogleドライブに保存しておいてください)。

添付ファイルを取得したら、optionオブジェクトのattachmentsプロパティに取得したファイルを設定します。
設定する時には「BlobSource」型にする必要がありますが、file.getAs(MimeType.PDF)の部分で「BlobSource」型にしています。
MimeType.PDFはPDFファイルの「BlobSource」型ということです。

fromオプションで送信元アドレスを設定する

fromオプションで送信元のアドレスを変更できます。
これはGmailの「設定」ー>「アカウントとインポート」の「名前」項目で設定できるメールアドレスを使って送信できるというものです。

fromのオプションを設定する例

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var aliases = GmailApp.getAliases();
  if (aliases.length > 0) {
    var option = {
      from:aliases[0]
    };
    MailApp.sendEmail(to, subject, message, option);
  } else {
    MailApp.sendEmail(to, subject, message);
  }
}

var aliases = GmailApp.getAliases();の部分でGmailの「設定」ー>「アカウントとインポート」の「名前」項目に設定しているエイリアスを取得しています(配列は0始まり)。
Google Apps Scriptの配列については、通常のJavaScriptの配列と同じなので、Web検索するとすぐに出てくると思います。
公式の情報が知りたい時はMDN公式リファレンスに詳しく載っています。

エイリアスは配列で取得できるので、使用するエイリアスをfromプロパティに設定します。

nameオプションで送信者名を設定する

nameオプションはメールの送信者名を設定します。

何も設定せずにメールを送信した場合、宛先の相手にはメールアドレスか、電話帳の登録名が表示されます。
ですが、「運営事務局」などのようにこちらから意図した表示名を表示したい場合などはnameオプションで設定します。

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var option = {
    name:'GASタマイズ-運営'
  };
  MailApp.sendEmail(to, subject, message, option);
}

htmlBodyオプションでHTMLメールにする

htmlBodyオプションはHTMLメールを設定できます。
HTMLメールとは何かを知りたい方はこちらのサイトが参考になります。

このオプションを指定するとmessageで設定している本文は無視されて、HTMLで書かれたコードが本文に反映されます。

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var option = {
    htmlBody:'<div style="color: red;">これはHTMLテストです。</div>'
  };
  MailApp.sendEmail(to, subject, message, option);
}

htmlBodyプロパティで指定している’<div style=“color: red;”>これはHTMLテストです。</div>’の部分により、メール本文では「これはHTMLテストです。」の部分が赤字で届きます。

inlineImagesオプションでHTMLメールで画像を参照する

inlineImagesオプションはHTMLメールに画像が設定されている場合に、このオプションを使って表示する画像を設定してあげます。
このオプションの設定は少し複雑で、大きく2つの設定が必要です。

  1. htmlBodyオプションに設定したHTMLメール本文の中に画像タグである<img src=“cid:imageKey”/>を設定する
  2. inlineImagesオプションに{imageKey: imageSource}の形式で表示したい画像を設定する

これらの設定を行うと下記のコードになります。

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var mailBody = '<div style="color: red;">これはHTMLテストです。</div>'
               + '<img src="cid:id-1"/>';
  var imageFile = DriveApp.getFileById('abcdefghijklmnopqrstuvwxyz');  // ★ファイルのファイルID

  var inlineImageObject = {
    'id-1': imageFile.getAs(MimeType.PNG)
  };
  var option = {
    htmlBody: mailBody,
    inlineImages: inlineImageObject
  };
  MailApp.sendEmail(to, subject, message, option);
}

inlineImageObjectはHTMLメール本文に設定する画像の数だけ{imageKey: imageSource}の形式で設定します。

画像が複数ある時は{imageKey1: imageSource1, imageKey2: imageSource2}のようにカンマ(,)で区切ります。
javascriptのオブジェクトについて、詳細な情報が知りたい方はMDN公式リファレンスで詳しく説明されています。

noReplyオプションで返信不可にする設定

noReplyオプションでメール受信者がこちらのメールアドレスに返信できないようにします。
企業側から送るキャンペーンのメールなどは返信不可であることが多いです。

この設定はGoogle Workspaceのみで通常利用では使用できないようになっています。

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var option = {
    noReply: true  // ★true:返信不可/false:返信可
  };
  MailApp.sendEmail(to, subject, message, option);
}

replyToオプションで返信先を変更する設定

replyToオプションはメール受信者からの返信先を別のメールアドレスに設定したい時に使います。

function myFunction() {
  var to = 'mike@example.com';
  var subject = 'これはテストです。';
  var message = 'これはTestです。';

  var option = {
    replyTo:'bob@example.com'
  };
  MailApp.sendEmail(to, subject, message, option);
}

まとめ

Google Apps Scriptを使ってメールを送信する方法と送信時のオプション全9つについて解説してきました。

プライベートで利用するのであればここまでの設定は不要ですが、ビジネス利用するとなると必要になってくる場面があるかもしれませんね。
自動化できることは自動化したいですが、「メールの送信方法が限られるので自動化できない」ではちょっと困ります。

Cc、Bccや添付ファイルの設定方法がわかれば、社内用の通知メールに利用できるようになるし、HTML形式のメールが使えるようになると、メルマガも自動配信の仕組みが整えられます。

こちらの記事を参考にして、Scriptから様々なメール送信方法を使って、ぜひ日々の業務に有効活用してみてください。

参考サイト:Googleの公式リファレンス