メインコンテンツへスキップ
見出し画像

【配布】Gmail受信&自動化ツール ~Pythonでメールを自動化 DiscordやLineに転送!?~

    こんにちはRcatです。
    今回はPythonを使ってGmailを受信していきます。
    チャットアプリが主流となった今でも、公的なところから配信される情報に関してはやはりメールが一般的です。

    今回は近況報告にも書いたように、地域の防災放送の内容をメールで送ってくれるサービスに登録したので、それを転送できるように解析するようなものを作っていこうと思います。
    もちろん、それ専用のためではないので、例えばnoteから来たメールを分析して売上を自動集計などもやり方次第では可能です。

    次回:DBに書き込み(マイブーム)


    はじめに

    利用規約

    情報や作品の活用時は事前に利用規約をご確認ください。

    コメントについて

    利用規約のガイドラインを確認の上コメントしてください。
    則っていないコメントは削除します。


    概要

    概要

    最初の方に書きましたが、Pythonを使ってGmailを受信します。
    多くの方はGoogleアカウントをお持ちでと思いますし、今時キャリアメール使ってる人もあまりいませんよね。そういった意味でもGmailに対応するというのは、かなり幅広い利用価値があるのではないかと考えています。


    自動処理プログラムの使い方

    まず初めに、今回私が作成した自動処理プログラムの使い方だけを簡単に説明します。

    実行環境

    • Windows11

      • Python3.11.6

    • Linux(Ubuntu)

      • Python 3.10.12

    できること

    • トリガーを設定して任意の処理を実行
      差出人、件名、本文。これら3つを条件として指定することで、任意の処理を実行することができます。
      例えば"noteから来たメール"で"件名に購入が含まれる時"など

    • 後続処理は自由
      メールを受け取った後、差出人と件名と本文が文字列で取得できます。
      テンプレートに従い、受信した後の処理を自由に作成することができます。例えば、LINEやDiscordに転送するなど。

    • Discordへ転送
      DiscordはWebHook経由での転送をテンプレコードとして作成済みです。

    • Lineへ転送
      Lineはmessaging-apiを使ったBOT(公式アカウント)経由での転送をテンプレコードとして作成済みです。

    • メールの保存
      受信したメールはテキスト形式でローカルに保存されます。これをどう料理するかはユーザー次第。

    • 容易なカスタマイズ
      後続処理はテンプレートファイルをコピーして、その中に記述する方式であり、メインのプログラムに触る必要はありません。
      トリガー処理もテンプレート側に記述してあるので、トリガーの部分も知識があればカスタマイズ可能です。

    使用例 (地域の防災放送をdiscodに転送)

    画像

    例えばDiscordに転送する最も簡単な例がこちらです。
    地域がばれてしまうので隠してるところが多いですが、メールの本文をDiscordに転送しています。
    こういうのを家族グループなんかに横流しするのに役立ちます。

    ちなみに元のメールはこんな感じです。書いてある内容をそっくりそのまま投稿という感じですね。

    画像

    ちなみに今回の転送はWebHookを用いています。
    いつもはボットを使うんですが、それを使うと導入の難易度が上がってしまうので、簡単に使えるものでテストしてみました。

    Webフックの作り方と使い方に関しては、以下で記事を投稿しましたので合わせてご確認ください。

    ちなみにbotを使って簡単に転送する方法ですと、私が紹介しているロギングボットを使うという手もあります。
    私のテンプレートを使う場合、このロギングボットを導入することができ、非常に簡単な入力だけでDiscordに転送することができます。

    ちなみにnoteのフォローのメールを自動転送するとこんな感じ。
    今回はメールを受信するにあたって、HTML形式の場合は全てタグを取り除き、プレーンテキストにするようにしています。
    HTML形式ですと、noteのメールはものすごく長く人間が見てもさっぱり分からないのです。AIに入力しようものなら、文字数が多すぎて処理が重いか、従量課金が上がってしまいます。

    画像

    使用例 (Lineにも転送してみた)

    せっかくなのでLineのBOTを使ってグループに転送もしてみました。
    こんな感じでBOTがメールの内容を転送してくれます。
    本場の"公式アカウント"みたいですねww

    画像

    初回起動と設定

    このセクションではプログラムをダウンロードいただいた場合、実際にどこをどのように書き換えれば使用できるのかについて解説します。

    まず、前提としてPCにはPythonが入っている必要があります。
    導入方法はこちらを参考にしてください。

    本ツールは初回起動時は設定がないため即落ちします。
    とりあえずstart.batを実行し、自動環境構築を行います。
    Linuxの場合はstart.shです。

    画像

    環境構築が終わると以下のようにデータがたくさん増えます。
    一番下のコンフィグをメモ帳で開いてください。

    画像

    中身を開くとこのようになっています。
    このうち、Gmailに関する部分の設定を入力する必要があります。
    ユーザーネームとアプリパスワードを自分のメールアドレスとアプリパスワードに置き換えます。
    アプリパスワードの取得方法につきましては、この下のGoogleアカウントの準備を参照してください。

    画像

    それ以外の設定に関しては、本ツールは無限ループでメールサーバーにチェックしに行くようになっていますので、チェック間隔が秒数で入力してあります。デフォルトは300で5分おきです。変えたい場合はここを変えてください。

    一番最後は設定ではなくシステムの変数です。これは最後に取得したメールの日時を記録しておき、メールがダブらないようにするためのものです。あまりにも多くのデータを初回に取得してしまわないように、初回は昨日の日付になるように調整されています。
    もし初回にメールを全て取得したいなどであれば、2000年などを過去の日付に戻すこともできます。ま、そんなに大量のメールを処理した実績はないので動くか分かりませんが。

    メール自動処理の設定

    配布しているフォルダの中の"modules"フォルダーの中にtemplate.pyというファイルがありますので、それをコピペして増やして使います。
    こちらは私の例ですが、防災とノートのフォローメール転送を作ってみました。
    名前はPythonの命名規約に違反しなければ大丈夫です。日本語とかはダメですよ。

    画像

    書き換えを行う部分は次の箇所です。
    大体100行くらい下に進むとメールアドインという名前のクラスあります。
    この中にトリガー条件がありますので、まずはここを設定します。

    画像

    まず最初にEnableの所をTrueにしてください。
    これがFalseのままだと処理をしない状態です。

    フラグの次はトリガーです。
    例えば、note のフォローメールをトリガーする場合は以下のようになります。

    画像

    この場合の条件は以下のようになります。
    差出人のアドレスがnoteの自動配信メールであること、かつ件名に"フォロー"が含まれること。しかし本文は何でも良い。

    条件はリストにしていますので、例えば"フォロー"または"スキ"の両方のメールを受け取りたい場合は以下のようにします。送信元や本文で検索する場合も同じです。

    画像

    自動処理の記述方法

    トリガーを書き換えたらさらに下に進み。大体150行目くらいに差し掛かったところに自動処理を記述するところがあります。

    画像

    知識のある方はCustomActionのメソッドの中に好きな処理を書いてしまってください。
    ちなみにMailオブジェクトからそれぞれ以下の情報が受け取れます。

    • 差出人:Mail.sender

    • 件名:Mail.subject

    • 本文:Mail.body

    • 受信時刻:Mail.date_time

    また、今回の例で使用しましたので、DiscordのWebフックを叩くだけであればテンプレートを用意しました。
    上の画像で言えば149行目の一番最初の"#"を削除した上で、158行目にWebフックのURLを入力します。’’ だけ書いてあるので、この内側にそのまま入れてください。
    これだけで条件にマッチしたメールが転送できるようになります。

    画像
    長いので見切れてますが…

    Lineの場合はこちらの関数になります。
    TOKEN_LINEにBOTのトークンを設定し、LINE_GROUPIDにBOTが参加しているグループのIDを設定することで、そこにメッセージを転送します。

    画像

    BOTの作り方はこちらを参考にしてください

    グループIDはこちらで作成したツールを起動すると、メッセージ送信時に表示されます。

    以上が本ツールの使い方となります。
    受信したあとどうするかはユーザー次第なのでシンプルです。
    超簡単な処理であればアイディア次第でテンプレ追加も検討します。

    保存されたメールを見る

    1度ツールを実行すると、このようにメールが保存されます。
    こちらは保存されるので、もし参照したいファイルがあれば他のプログラムからも参照することができます。

    画像

    例えばノートマネーから昨日来てるメールだとこんな感じですね。
    上の3行は確実に固定ですが、それ以下の本文は何が入ってくるかわからないので、フリーフォーマットです。

    画像

    Googleアカウントの準備

    アプリパスワードの作成

    今回、Gmailにアクセスするためにアプリパスワードを生成する必要があります。
    Gmailにログインするには、登録したメールアドレスとパスワードが必要ですが、Googleアカウントのパスワードではなく、アプリパスワードというものを使いログインします。

    この辺はアカウント関連の話でもあるので、直接リンクを載せるのではなく、ヘルプを貼っておきます。

    少し下の方に行くと、アプリパスワードを管理するためのリンクが公式のヘルプページにありますので、ここから作成に飛んでください。
    なお、作成するには2段階認証を有効にしている必要があるそうです。

    画像

    作成画面に入るとこのような感じになっていますので、好きな名前をつけて作成ボタンを押します。
    今回はそのままの名前で作成しました。

    画像

    この後、16桁のアプリパスワードが表示されます。
    一度しか表示されないので、忘れないようにしてください。とはいえ、忘れたらまた再生成すればいいだけなので、別に忘れてもいいっちゃいいです。

    これでGoogleアカウント側の準備は完了です。最新の認証に比べてセキュリティ面で劣っているとのことで、Googleは推奨しないと書いてあります。
    そのあたりは承知の上で進めるように
    してください。


    解説

    ソースコードの解説は別途記事を作成予定
    自分のメールを扱うシステムですので、中身がちゃんと分かってないと信用できないという方は解説の方に目を通すことをお勧めします。

    まとめ

    今回はGmailをPythonで受信して、その内容から自動処理につなぐ部分を作成しました。
    例題としてDiscordにメッセージを転送しましたが、もうこれはこれで普通に使えますね。

    【おまけ】LinuxでSystemdに追加

    本作は主にLinuxで24H稼働しているコンピューターでの実行を想定しています。
    その場合はSystemdを使いWindowsでいうスターとアップ(厳密にはタスクスケジューラ)で起動時に自動実行するのですが、設定ファイルとか地味に面倒です。
    そこで、よくサービスは追加するので支援スクリプトを用意しました。
    よろしければ参考にしてみてください。


    配布情報

    配布URL

    以下のURLより配布しています。
    利用規約に同意の上ご利用ください。

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=GMail受信システム

    リンク集

    Pythonのインストール方法

    【Linux】Systemd追加支援スクリプト

    LoggingBOTの導入方法

    PythonでDiscordのWEBHookを使用する

    ミニPCにLinuxをインストール



     
     
    モノづくりが趣味。 "売ってないなら自分で作ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワーク 全部やります。 記事執筆はAI不使用。 ご連絡や利用規約はプロフィール記事参照。

    あなたへのおすすめ