LoginSignup
10
15

More than 5 years have passed since last update.

pythonでgmailのメールを受信、slackに通知

Posted at

メールをslackに通知するだけならIFTTTとかでいいのだけど、もう少しいじりたいのでその基盤を作りました。

Gmail

初めはsmtplibとか元々python3にあるパッケージを使おうと試したんですが、最近(2017年2月現在)gmailは認証が厳しくなったのかうまく行きません。「python メール」とかでググると2015年、2016年の記事でsmtplibを利用したコードが沢山でますが認証失敗しちゃいます。ということでgoogle APIを使います。大体ここを参考にします。

PythonでGmailAPIを使ってみよう
https://github.com/TM-KNYM/How2UseGmailApiByPython

僕のリポジトリのgmailapi.pyは上記リポジトリのほぼパクリですが、2to3コマンドでpython3用に変更、pep8に準拠するようちょっと修正してます。

メソッドgetMailContentで指定したidのメール内容をdict型で取得できます。
メール本文bodyはbase64に変換されてるので以下を参考にutf8に直します。

Pythonでbase64エンコード・デコードする方法
http://yut.hatenablog.com/entry/20110825/1314228258

メール本文はurlも含むのでbase64.urlsafe_b64decode()でbytes型にdecodeし、
さらにdecode('utf-8')で見やすい形にします。

ちなみにsnippetは元々utf-8なんですよね。bodyも初めからutf-8にしてくれても良さそうですが……。

また上記プログラムを定期実行するとして、一度通知したメールを再度通知はしたくないと思います。
そのため基本は未読メール(is:unread)を取得し、取得したメールはメソッドdoMailAsRead()で既読した状態にしています。

slack

ここを参考にしました。

python-slackclient
https://github.com/slackapi/python-slackclient

メール本文は長くなるときもあるのでattrachemntsに入れて送信します。
api_call内でtextにそのまま入れるとslack上では全文一気に表示されちゃいますが、
attrachemntsだと短縮された状態で表示され、「Show more」をクリックすることで全文見れます。

10
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
15