はじめに
最近あまりネタ関係のことができていなかったので、欠勤メールを送ってくれるボタンを作ってみました。
かなり見た目が必要最低限ですが、ボタンを押すと勝手にメールを送信してくれます。
作って終わりだと少し悲しいので、紹介をさせてください。
動機
私はメールのお作法?みたいな奴が大嫌いなんですよね。
SNSが根付いている世代だからなのかよく分かりませんが、本題と全く関係ないことを長々と書くのは時間を無駄にしている感覚がすごいします。
かといって失礼な人になりたくはないので毎回ネットで調べながら文章を作ってしまうんですよね。
悲しきかな。。。
こういうときに自動化したくなるのはプログラマー性ではないでしょうか。
システムとしてはどれも以前やったことがあったものの組み合わせでできそうだったので、やってみたというわけです。
システム
全体の概要はこんな感じ。
- ボタンの入力をラズパイで動作するPythonで受け取る
- ラズパイからGAS(Google Apps Script)にHttpリクエストを送る
- GASがリクエストを受け取るとgmailを操作してメールを送信する
この3つの流れを通して、ボタンを押す-> メールを送る
を実現します。
GASを用いることで認証関係など難しいことを一切考えずにgmailを送ることができるのでメールを送るために利用しました。
これを実装するに当たって三つの作業が必要になります。
- ボタンの配線をする
- ラズパイで動作するPythonを書く
- GASを書く
ボタンの配線をする
昔買った電子キットを使って配線をしてみました。
【ラズパイ】電子工作キットを試しに買ってみた - はなちるのマイノート
回路は大学の単位を落としかけたほど全く分からないので、配線は以下の記事を参考にしながら作ってみました。
ラズパイ+タクトスイッチでSlack用へぇボタン作成してみた - Qiita
すごい分かりづらいですが、写真はこんな感じ。
Pythonを書く
ボタンの入力を受け取り、GASにリクエストを送るプログラムを作成します。
import RPi.GPIO as GPIO import time import requests GPIO.setmode(GPIO.BCM) GPIO.setup(26, GPIO.IN) while True: if GPIO.input(26) == 1: print("Send") response = requests.get("自分のGASのAPIのURL?to=<宛先のメアド>") print(response.status_code) time.sleep(10) time.sleep(0.5)
GPIO26
を入力としていて、それに対応したコードを書きました。
GASを書く
最後にリクエストを受け取るとメールを送るプログラムを作成します。
function doGet(e){ const mailTo = e.parameter.to; MailApp.sendEmail(mailTo,'概要','本文'); // 一応成功したことを知らせるためにJsonをレスポンスとして返す const response = JSON.stringify({message : "succeeded"}); let output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(response); return output; }
URLの後ろにto=sample.gmail.com
みたくパラメーターがついているので、それを読み取りGmailを送ります。
その後ろに長々と書いているJsonを返す奴は正直書かなくても大丈夫です。
書き終わったらウェブアプリケーションとして導入
をし、URLを控えてラズパイのPytonのURLに埋め込めば完成です。
最後に
ボタンを押すだけで色んな処理をしてくれるというのはなかなかロマンがありますよね。
ボタンを押したあとにちゃんと送信できたか確認できるように、LEDが点滅するなんかを付け加えたりしたらもっと良さそうな気がします。
もしラズパイを持て余しているかたがいればこういったものを作ってみるのも面白いかも知れません。
ただ翌日には邪魔で解体をしたのはここだけの秘密。
ではまた。