Pythonは自動化を行う上で有益な言語です。
自動化を行う上で知っておくと便利な知識はズバリ通知です。
「メールで処理が終わった後に通知が欲しい」
「Slackに処理完了の通知が欲しい」
など、PDCAを回す上で処理完了の通知が来ると便利です。
今回の記事では「通知」に焦点 を当てて紹介していきます。
メール通知
単純な通知を送信したいときの通知方法を紹介します。
Pythonにはsmtplibという標準ライブラリがあり、基本的にはMIMEを作成して送信するだけです。
ちなみにMIMEとは
MIMEとは、TCP/IPネットワーク上でやり取りする電子メールで、当初の規格で唯一記載することができたASCII英数字以外のデータ(各国語の文字、添付ファイルなど)を取り扱うことができるようにする拡張仕様。
です。
早速smtplibでメール送信を行っていきましょう
認証なしの場合
社内での環境などSMTPサーバーへの認証が不要な場合こちらでOK
import smtplib from email.mime.text import MIMEText # 送受信先 to_email = "発信先のアドレス@xxx.com" from_email = "発信者のアドレス@xxx.com" # MIMETextを作成 message = "メール本文" msg = MIMEText(message, "html") msg["Subject"] = "テストメール" msg["To"] = to_email msg["From"] = from_email # サーバを指定する server = smtplib.SMTP("メールサーバー", ポート番号) # メールを送信する server.send_message(msg) # 閉じる server.quit()
認証ありの場合
server.send_message(msg)の前に、認証アカウントとパスワードを入力すればOKです。
import smtplib from email.mime.text import MIMEText # 送受信先 to_email = "発信先のアドレス@xxx.com" from_email = "発信者のアドレス@xxx.com" # MIMETextを作成 message = "メール本文" msg = MIMEText(message, "html") msg["Subject"] = "テストメール" msg["To"] = to_email msg["From"] = from_email # サーバを指定する server = smtplib.SMTP("SMTPサーバー", ポート番号) # 認証を行う server.login(account, password) # メールを送信する server.send_message(msg) # 閉じる
Gmailを利用したメール通知
続いてGmailを用いてメール通知を発信する方法を紹介します。
SSLを用いて接続します。
Gmail側の設定
http:// https://support.google.com/accounts/answer/6010255
の手順どおり、「安全性の低いアプリ」を有効にする必要があります。
Gmailの設定で変更ができますが、セキュリティ強度が落ちるため、専用のアカウントを用意するのが望ましいです。
上記URLへアクセスしたのち、セキュリティをクリックします。
安全性の低いアプリのアクセスへスクロールし、アクセスを有効にします。
これで準備はOKです。
Gmailでメールを発信する
MIMEの作り方はsmtplibのときと同様です。
import smtplib import ssl from email.mime.text import MIMEText # 以下にGmailの設定 gmail_account = gmailアカウント gmail_password = gmailパスワード # メール送信先 mail_to = "送信先のアドレス@xxx.com" # メールデータ(MIME)の作成 subject = "メール送信テスト" body = "メール送信テスト" msg = MIMEText(body, "html") msg["Subject"] = subject msg["To"] = mail_to msg["From"] = gmail_account # Gmailに接続 # メール送信処理 server = smtplib.SMTP("smtp.gmail.com", 587) server.starttls() server.login(gmail_account, gmail_password) server.send_message(msg) server.quit() print("ok.")
SSLでメール発信するためには接続時に指定してあげればOKです。
# Gmailに接続 server = smtplib.SMTP_SSL("smtp.gmail.com", 465, context=ssl.create_default_context()) server.login(gmail_account, gmail_password) server.send_message(msg) # メールの送信 print("ok.")
添付ファイルをつける
添付ファイルをつけて送信する場合は添付ファイルのパスを設定し、添付処理を行います。
import smtplib import ssl from email.mime.text import MIMEText from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart from email.header import Header from email import encoders #Gmailの設定を書き込む gmail_account = gmailアカウント gmail_password = gmailパスワード # メールの送信先 --- (*2) mail_to = "送り先のアドレス@xxxx.com" # 添付ファイルのパス file_path = "./test.zip" # メールデータ(MIME)の作成 subject = "添付ファイル送信テスト" body = "添付ファイルの送信テスト" encoding = 'utf-8' msg = MIMEMultipart() msg["Subject"] = Header(subject, encoding) msg["To"] = mail_to msg["From"] = gmail_account msg.attach(MIMEText(body, 'plain', encoding)) # 添付ファイル(ZIP)をメールに追加 attach = MIMEBase('application','zip') with open(file_path, "br") as f: attach.set_payload(f.read()) encoders.encode_base64(attach) attach.add_header('Content-Disposition', 'attachment', filename='attachment.zip') msg.attach(attach) # Gmailに接続 server = smtplib.SMTP_SSL("smtp.gmail.com", 465, context=ssl.create_default_context()) server.login(gmail_account, gmail_password) server.send_message(msg) # メールの送信 server.quit() print("ok.")
slackに処理完了通知を送る
slackへ完了通知を送る際は、webhookを利用するのが簡単です。
webhookの参照方法
https://slack.com/signin?redir=/apps/new/A0F7XDUAZ--incoming-webhook-
上記へアクセスしサインインします。
通知したいチャンネルを選悪し、Incoming Webhookインテグレーションの追加をクリック
webhook URLが記載されているので、コピーして控える。
実際にslackへ通知を送ってみる
slackへの通知はjsonをpostすればOKです。
import json import requests # webhookURLを指定 webhook_url = "https://hooks.slack.com/services/TPGNV7872/BUUBZKAHX/xxxxxxxxxxxx" # 送信するテキストを定義 text = "PythonでSlackにメッセージを送る" # Slackに送信する requests.post(webhook_url, data=json.dumps({ "text": text }))
プロキシサーバーを経由してのアクセスはrequestsにploxies引数を追加してやればOK
import json import requests net_proxies = {'http': 'プロキシサーバー:ポート', 'https': 'プロキシサーバー:ポート' } # webhookURLを指定 webhook_url = "https://hooks.slack.com/services/TPGNV7872/BUUBZKAHX/xxxxxxxxxxxx" text = "PythonでSlackにメッセージを送る" # Slackに送信する requests.post(webhook_url, proxies=net_proxies, data=json.dumps({ "text": text }))
まとめ
今回の記事では
を紹介しました。
処理についても大事ですが、完了を自動化することで効率を飛躍的に上げることが出来ます。
Pythonを初期から学びたい!という方には
無料の学習サイトではドットインストールhttps://dotinstall.com/ がおすすめです。
ある程度の条件式やループなど初級の内容が動画でまとめられており入門編としてはこれをやっておけば問題ありません。
初学習で終える自信がない方向けの最初の一冊は
「Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ」がおすすめです。
2冊目は(あるいは学習意欲の高いかたは)Pythonの基礎知識が隅々まで解説されている「入門Python3」がおすすめです。
業務で自動化をしたい、など目標がふんわりとしている方には
「退屈なことはPythonにやらせよう」もおススメです。
こちらの本は自動化に集中した内容となっており、流し読みで自分のスキルを高めることができます。僕もだいぶお世話になりました(笑)
有料の動画講座に関して言えばUdemyさんがおすすめです。
こちらのサイトは初学がある程度すすんでいる方向けです。
有料だけに講座ごとのジャンルが豊富で学びたい講座を選択して選ぶことが出来ます。
PythonではAI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで10万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます。
お疲れさまでした。