Google Apps Script

Google Apps Script プログラミング (3) Gmail を使ってメールを送る

図13

※この記事は、「Google Apps Script プログラミング (2) シートへ出力しよう」の続きです。(2) の記事「おまけ」解答例は、前記事末尾に書きました。

前回は、Google スプレッドシートの 1列目にあたる1行目から3行目に、行数を示したコメントを入れるプログラムを作りました。今回は、Gmail アカウント を使って、メールを送る(送信する)プログラムを作成します。

今回のゴール

プログラムによって、Gmail を使ってメールを送信できます。

今回のゴール

(1) 準備をします

1) Google スプレッドシートの中身を空にします

まず、Google スプレッドシートの中身を空にしましょう。今、メッセージの入っている枠(セル)を選択して、Delete キーを押して下さい。

2) 新しい機能「sendEmail」を作ります

次に、新しい機能「sendEmail」を作ります。今は「myFunction」を使っていますが、これは残したままにしましょう。

「myFunction」の下(9行目から 11行目)に、以下のように記述します。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  for(let num = 1; num <= 3; num++){
    let message = "これは" + num + "回目のテストメッセージです";
    sheet.getRange(num,1).setValue(message);
  }
}

function sendEmail() {
  Logger.log("この機能をテストします");
}

新しい機能「sendEmail」が正しく動いているか、確認をしましょう。プログラムを上書き保存した後、「実行する関数を選択」から「sendEmail」を選んで、「▷実行」を押して下さい。

正しく実行されると、以下のように表示されます。実行ログに、「この機能をテストします」と表示されます。

以上で、下準備が終了です。

(2) Gmailサービスを使ってメールを送ります

1) プログラムを書きます

それでは早速メールを送ります。以下の通り入力してみましょう。確認いただくのは、9行目から15行目です。

10行目のメールアドレス欄には、送信先のメールアドレスを入力する点に注意して下さい。ここでは試しに、ご自身のメールアドレスを入力することをお勧めします(以降の説明では、自身の Gmail アドレスに送ったと仮定して、説明を続けます)。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  for(let num = 1; num <= 3; num++){
    let message = "これは" + num + "回目のテストメッセージです";
    sheet.getRange(num,1).setValue(message);
  }
}

function sendEmail() {
  const okurisakiAddress = "test@example.com"; // " "の間には、送信先アドレスを入れてください
  const honbun = "こんにちは、これはプログラムを使って送信したメールです";
  const kenmei = "連絡:初めてのメール"

  GmailApp.sendEmail(okurisakiAddress, kenmei, honbun);
}

2) 権限を承認・許可して実行します

入力を終えたプログラムをを上書きし、実行してみましょう。すると、前回記事と同じように、権限の承認を求められます。前回記事を参照しながら「権限を承認」をして進めていきましょう。

最後に「許可」を求められますが、ここに Gmail に関する権限が求められていることを確認してください。「許可」を押すと、「Authorization Success」を表示されて、小さなウィンドウが閉じられます。

「実行ログ」を見て、プログラムが正しく実行されることを確認してください。

承認を求められます
Gmail へのアクセスを求められます
実行ログに「実行完了」と表示されています

3) 実行結果を確認します

メールが確かに送信できているか、確認します。ご自身のメールアドレスを設定された場合は、メールソフトを使って受信してみましょう。すると、プログラムを使って送信した記録が残っています。

※ここでは、「自分自身の Gmail アドレスへ送信した」と仮定して説明をします。下の図では 2通メールが見えていますが、「セキュリティ通知」というメールは、このプログラムが Gmail へアクセスすることの許可がされた記録のメールです。

メールを受信していることが確認できます
メールが届いていました(To 自分と書かれているのは、私の場合、送信元が自分自身だったからです)

(3) GmailApp.sendMail() での送信

このプログラムでは、Google Apps Script の持つ機能 GmailApp.sendMail() を使って、送信しました。

function sendEmail() {
  const okurisakiAddress = "test@example.com"; // " "の間には、送信先アドレスを入れてください
  const honbun = "こんにちは、これはプログラムを使って送信したメールです";
  const kenmei = "連絡:初めてのメール"

  GmailApp.sendEmail(okurisakiAddress, kenmei, honbun);
}

プログラムの世界では、. [ピリオド] を使ったり、() [カッコ] を使って機能を使うことが多いのです。今回は「GmailApp クラスにある sendEmail メソッドを使った」というのが、もう少し詳しい言い方です。

GmailApp.sendEmail(送信先のアドレス, 件名, 本文);

() の中に、送信先のメールアドレス, 件名, 本文 の順に情報を入れると、メールが送信できるのです。送信先のメールアドレスは複数指定できるので、一斉にメールを送れる便利さもあります。

こうした予め使えるクラスやメソッドと呼ばれるものの説明は、どのプログラム言語であっても、公式サイトに説明書きがあります。Google Developer のページでは、この GmailApp.sendEmail() の説明があります。

Class GmailApp | Apps Script | Google Developers

Google is committed to advancing racial equity for Black communities. See how. Send feedback Provides access to Gmail threads, messages, and labels. Creates a draft email message with optional arguments. The email can contain plain text or an HTML body. The size of the email (including headers, but excluding attachments) is quota limited.

(余談ですが、プログラミング言語「 Java 」に詳しいエンジニアが、「公式の仕様書を調べる。実行して出てきたエラーの意味を調べて理解する。この 2つが出来れば十分やっていける。」 とかつて言っていました)

このメール送信での注意点

この GmailApp.sendEmail() によるメール送信を、システムの実運用で用いるのはお勧めしません。 その理由は、プログラムを作成した人のメールアドレスがそのまま From (送信元)に書かれるためです。

個人の Gmail アカウントでプログラムを作成したとすると、この仕組みでメールを送ると、個人アドレスが開示されてしまいます

かといって別のアドレス(例えば no-reply@honyarara.com)に書き換えて送信するオプションを使う場合には、書き換える別のアドレスを Gmail アカウントで取得してあるものを使わなければなりません(そうしないとエラーが出ます。メールアドレスの詐称につながるからです)。

また、Google Apps Script を使用して送信できるメール数には、制限があります。

このことから、システムによって自動的にメールを送る際には、別の手段を使用します。