2022-07-24





格安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) <= 1500){ //とりあえず1500文字以下のみ出力 echo $body_full; } else{ echo "body_full is over 1500 chars.\n"; }
と変更した。
4、上記を起動するコマンドメールアカウントを作成する
サーバーにPostfixが稼働しているという前提で、/etc/aliasesに1行登録するだけ。
/etc/aliases
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が発火しトークで受け取れるようになる。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【Swift UI】GeometryReader内のViewの位置が左にずれてしまう場合
XcodeでSwift UIアプリ実行時EXC_BAD_ACCESSエラーが出た場合
【Swift UI】右から登場し右へ消えるアニメーションボタンビュー
【Xcode】無償デベロッパで実機テストするまでのメモ
【Swift UI】アニメーションとトランジションの種類
【Swift UI】Hello Worldをフェードイン・アウトさせる
UbuntuにMariaDBを導入するメモ
Windows11+WSL2でUbuntuを使う【5】WSL2/Ubuntu本体自体をマシン起動時に自動起動させ常駐させる
【Windows11】マシン起動時にパスワード入力を省略して自動ログインする
進研ゼミチャレンジタッチをAndroid端末化する
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
Windows版Google Driveが使用中と言われアンインストールできない場合
Googleスプレッドシートを編集したら自動で更新日時を入れる
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
【Javascript】JSON配列内にある特定要素の取得法【Node.js】
【Apache】サーバーに同時接続可能なクライアント数を調整する
Googleスプレッドシートで図形をコピーして使いまわすには
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合