2023-07-23
格安SIMにするとキャリアメールが使えなくなるので、大概はGmailで代用することになる。
ただ、Gmailはキャリアメールと違っていらんメールも大量に届くので、キャリアメール感覚でアプリの通知をオンにしてしまうと通知がすごいことになる。かといって都度いちいちフィルタ設定していたらきりがない。
そこで、Gmailのフィルタ転送機能を使って、重要な差出人からのメールのみ、自分のサーバーに転送して、サーバーからLINE DevelopersアカウントのMessaging APIを使って自分のLINEアカウントへトークとして投げれば、キャリアメールに匹敵する通知が受けられる。重大な取引先からのメールなどをすぐに把握できる。
1、LINE Developersにアカウント登録してボットチャネルを作成する
https://developers.line.biz/ja/
ここで、自分のLINEアカウントでディベロッパ登録をする。プランはフリーでOK
(ただし1000回以上メッセージを送る場合有料プラン)
Messaging APIを使用するチャネルを新規作成する。これでサーバからこのAPIをたたいて自分にトークを送れるようになる。必要な情報は以下の通り
・「自分のユーザーID」
重要なメールを自分自身のLINEにトーク投げするので、自分のユーザーIDを知らなければならない。これは、作成した「チャネル基本設定」の「一番下」に「あなたのユーザーID」があるはずで、これのこと。コピーしておく。
・「チャネルアクセストークン」
チャネル基本設定の横タブ「Messaging API設定」の「一番下」に「チャネルアクセストークン(ロングターム)」があるはずで、コピーしておく。
2、標準入力からデータを受け取って自分のLINEトークに貼り付けるプログラムを書く
Pythonで書く。インストールはこちら。
LINE SDKをインストールする。
sudo -s pip3.8 install line-bot-sdk
本題のプログラムソースは以下。
Python | sendmessage.py | GitHub Source |
import os import sys from linebot import LineBotApi from linebot.models import TextSendMessage str = '' for line in sys.stdin: str += line channel_access_token = "MY ACCESS TOKEN" line_user_id = "MY USER ID" line_bot_api = LineBotApi(channel_access_token) def main(): line_bot_api.push_message(line_user_id, TextSendMessage(text=str)) if __name__ == "__main__": main()
MY ACCESS TOKEN、MY USER IDは1、で得た2つに書き換える。
たとえばこんなテキストファイル test.txt があったとして、
てすと です。
cat test.txt | /usr/local/bin/python3.8 sendmessage.py
としてみる。アクセストークンと自分のユーザーIDが合っていれば、自分のLINEトーク画面に「てすとです」とLINE通知が出るはずだ。
LineBotApiError: status_code=400,"The property, 'to', in the request body is invalid (line: -, column: -)"
などというようなエラーが出た場合、ユーザーIDが間違っているか、ボットからのメッセージを受け取れる設定になっていない。
LineBotApiError: status_code=401,"Authentication failed due to the following reason: invalid token. Confirm that the access token in the authorization header is valid."
などというようなエラーが出た場合、アクセストークンが間違っている。
3、標準入力からメールデータを受け取り解析して標準出力するプログラムを書く
それに関しては以前のこの記事の、maildecode.phpを基本そのまま使えば問題ない。ただし以下の修正をしたほうが便利。
・不要なヘッダをechoしている箇所はコメントアウトする
・ダンプはしない(var_dump($object);はコメントアウト)
・/etc/aliasesから起動するので、上記sendmessage.pyの置いてあるディレクトリまでchdirする
例:chdir( "/home/hogeuser/mail-to-line-talk" );
追記
LineBotApiError: status_code=400,Length must be between 0 and 2000
というエラーが出たので、メッセージは2000文字以下でないとダメな模様。よってプログラムの最後で
if(mb_strlen($body_full) と変更した。 <b style="color: #0000ff;">4、上記を起動するコマンドメールアカウントを作成する</b> <a href="article.php?id=postfix-setup-note">サーバーにPostfixが稼働</a>しているという前提で、/etc/aliasesに1行登録するだけ。 /etc/aliases <pre> mail-to-line-talk: "| /usr/local/bin/php /home/hogeuser/mail-to-line-talk/maildecode.php | /usr/local/bin/python3.8 /home/hogeuser/mail-to-line-talk/sendmessage.py"とし、
sudo newaliasesとして更新。これまで書いたものが正しければ、
mail-to-line-talk@example1155.jp↑(あくまで仮)にメールを送れば、自分のLINEトーク画面にそのメール内容が通知されるはず。 5、Gmail側でフィルタを作成し、mail-to-line-talkに転送 最後に、PCでGmailの設定画面を開いて、「フィルタとブロック中のアドレス」を開き、「新しいフィルタを作成」する。 「To」には自分のGmailアドレス(例:hogeuser111222@gmail.com)を指定し、自分を明示的に宛先としてきたメールに限定、とし、 「含む」に、たとえば「from:*@docomo.ne.jp」などとすると、docomo.ne.jpのアドレスの人からのメールなら、という条件が作成できる。 「続行」とし、リアクション一覧が出るので、「特定のメールアドレスに転送」を選択して、4、で作成した(例)mail-to-line-talk@example1155.jpを新規指定すれば、この条件に合致したメールは自分のサーバのコマンドメールアカウントに転送され、LINE Messaging APIが発火しトークで受け取れるようになる。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Windows版Google Driveが使用中と言われアンインストールできない場合
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux】iconv/libiconvをソースコードからインストール
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】