2022年01月21日 更新

スプレッドシート経由で簡単メール送信

どうも、クラゲです。
Raspberry PiからGASを経由して簡単にメール送信する方法を紹介します。GASはGoogle Apps Scriptのことで、スプレッドシート上で簡単に記述できるスクリプトです。

ラズパイ側でPythonスクリプトを実行すると、すぐにメールが送信されている様子が分かるかと思います。件名や本文もラズパイ側から指定することが可能です。Google Apps Script経由で送信しています。

目次

[TOC]

Google Apps Scriptを使うメリット

ラズパイからメールを送信する際、SMTPサーバーなどの設定をラズパイのコードに書くことでも簡単に送信することができます。ただし、運用面でデメリットがあります。ラズパイのスクリプトが暴走したときは、基本的にラズパイの近くにいないと止められません。また、SMTPサーバーのパスワードなども記述する必要があり、ラズパイやmicroSDカードを紛失したきのセキュリティが心配です。

一方でGoogle Apps Scriptを使う場合は、暴走に気づいた場合にクラウド(スプレッドシート)で停止させることができますし、ラズパイ側にGoogleアカウントのパスワード記述は不要です。さらに、Googleアカウントさえあれば、新たな登録なしに簡単にGoogle Apps Scriptを使うことが可能です。

以上の理由から、クラゲはGoogle Apps Script経由でメール送信を使っています。

Google Apps Script作成

前提としてこちらのページを先に実行してください。

Google Apps Script側コードをこちらに書き換えて下さい。
メールアドレス myaddress@example.com については間違わないように、自分が持っているメールアドレスに変更してください。

function doGet(e) {
  //メールアドレス宛先、件名、メール本文
  MailApp.sendEmail('myaddress@example.com', 'ラズベリーパイからのお知らせ', 'これはテストです。');
}

保存後、デプロイ > デプロイを管理 から 新バージョン に変更してデプロイボタンをクリックします。
今回新たにGoogleアカウントを使ってメール送信するというアクションが新規追加されため、アクセスを承認ボタンが現れます。
承認すると、ユーザー本人に代わってメールを送信できる権限が与えられるため、Googleスプレッドシートの共有設定やウェブアプリのURLの取り扱いには注意しましょう。

RaspberryPiからGET送信

ラズパイ側のプログラムは以前と同じです。

import requests

url = 'https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec'
requests.get(url)

このプログラムを実行すると設定したメールアドレスへ送信されます。





このような件名と本文でメールが来れば成功です!

件名や本文の内容をパラメータで渡す

GET送信のパラメータを使うことにより件名や本文を、ラズパイ側で変えることが可能です。なお、取り扱いは要注意ですが、メール送信アドレスも変更可能です。



Google Apps Script側コード

function doGet(e) {
  //データを取り出す
  var value1 = e.parameter.data1;
  var value2 = e.parameter.data2;

  //メールアドレス宛先、件名、メール本文
  MailApp.sendEmail('myaddress@example.com', value1, value2);
}



RaspberryPi側コード

import requests

url = 'https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec'
data1 = '第2弾:ラズベリーパイからのお知らせ'
data2 = 'パラメータによるテストメールです。'

requests.get(url + '?data1=' + data1 +'&data2=' + data2)

今回はパラメータを複数渡しています。複数渡す場合は & を使うのがポイントです。





このような件名と本文でメールが来れば成功!
今回は単なる文字列にしていますが、ラズパイ側で取得したセンサー値などと組み合わせるなど、実用的な使い方はたくさんあります!

アプリの停止、アクセス権の削除

メールの送信元は承認したGoogleアカウントのメールアドレスで、送信先は先程のスクリプトに書いたメールアドレスになります。
万が一スプレッドシートの権限が誰でも編集できるようになってしまったり、アプリのURLが漏れたりした場合、悪用されてしまう可能性もあるので、しばらく使う予定がないのであれば、アプリケーションの停止やアクセス権の削除を行いましょう。
また、運用中のスクリプトが暴走してしまった場合、外出先であっても許可したGoogleアカウントでインターネットに接続できれば、止めることが可能です。

アプリの停止方法

デプロイ > デプロイを管理 から 右上のアイコンをクリックします。



次の画面で出てくるアーカイブボタンを押すことで停止します。



デプロイ > デプロイを管理を見てみるとアクティブなところには何もなく、全てがアーカイブ済みに移動しています。



再びアプリを再開したい場合は、該当するバージョンのところでペンアイコンをクリックして デプロイ を行うことで可能ですが、アプリのURLが変更になってしまうようですのでご注意ください!

URLが変わってしまうと面倒ですので、一時的な停止を行いたい場合は、コードをコメントアウトしてデプロイしておくほうが運用上は良いかもしれません。

アクセス権の削除方法

さらにスクリプトがメール送信を行うアクセス権を削除すると、より安全です。
以下のGoogleアカウント管理ページで行います。

https://myaccount.google.com/

アカウントを保護をクリックします。



セキュリティ診断サードパーティによるアクセス を開き、該当するアプリから アクセス権を削除するだけでOKです。



これで安心!

再びアプリを動かしたい場合は、デプロイで新バージョンを選択し再度承認すればOKです。

以上、「GASを使ってラズパイから簡単メール送信」でした!