市場情報と雑学と 〜明日使える知識を〜

某大手電気メーカーに勤める社内SE。マーケティング的なことも業務の中に入ってきているなかで有望な市場分析を発信していきます。また、導入してきたなかで便利な小物があれば紹介していきたいと思います。

Pythonでメール通知とSlack通知

Pythonでメール通知やSlack通知を行う

 

Pythonは自動化を行う上で有益な言語です。

 

 

自動化を行う上で知っておくと便利な知識はズバリ通知です。

 

 

「メールで処理が終わった後に通知が欲しい」

「Slackに処理完了の通知が欲しい」

 

など、PDCAを回す上で処理完了の通知が来ると便利です

 

 

今回の記事では「通知」に焦点 を当てて紹介していきます。

 

 

 

メール通知

SMTPを使って作業を通知

 

 

単純な通知を送信したいときの通知方法を紹介します。

 

 

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を利用したメール通知

 

PythonでGmailを使って通知を送信する

 

続いてGmailを用いてメール通知を発信する方法を紹介します。

 

SSLを用いて接続します。

 

 

 

Gmail側の設定

 

GmailPythonアプリの認証を行うためには

 

http:// https://support.google.com/accounts/answer/6010255

の手順どおり、「安全性の低いアプリ」を有効にする必要があります。

 

Gmailの設定で変更ができますが、セキュリティ強度が落ちるため、専用のアカウントを用意するのが望ましいです。

 

 

 

 

上記URLへアクセスしたのち、セキュリティをクリックします。

 

Gmailの設定(セキュリティ)を行う

 

安全性の低いアプリのアクセスへスクロールし、アクセスを有効にします。

 

安全性の低いアプリでのアクセス

 

安全性の低いアプリのアクセス無効から有効へ変更

 

これで準備は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に処理完了通知を送る

slackへ完了通知を送る際は、webhookを利用するのが簡単です。

 

 

webhookの参照方法

 https://slack.com/signin?redir=/apps/new/A0F7XDUAZ--incoming-webhook-
上記へアクセスしサインインします。

 

slackへのサインイン

 

 

通知したいチャンネルを選悪し、Incoming Webhookインテグレーションの追加をクリック

 

送りたいチャンネルを選択する

 

 

webhook URLが記載されているので、コピーして控える。

 

slackのWebhookURLを取得する

実際に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
}))

 

まとめ

 

今回の記事では

 

・社内環境など不正アクセスを気にしなくて良い場合はsmtplibが楽

gmailで通知をする場合は専用のアカウントを用意する

・slackのwebhookの参照方法

 

 を紹介しました。

 

処理についても大事ですが、完了を自動化することで効率を飛躍的に上げることが出来ます。

 

 

Pythonを初期から学びたい!という方には

 

無料の学習サイトではドットインストールhttps://dotinstall.com/ がおすすめです。

 

ある程度の条件式やループなど初級の内容が動画でまとめられており入門編としてはこれをやっておけば問題ありません。

 

初学習で終える自信がない方向けの最初の一冊は

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ」がおすすめです。

 

2冊目は(あるいは学習意欲の高いかたは)Pythonの基礎知識が隅々まで解説されている「入門Python3」がおすすめです。

 

業務で自動化をしたい、など目標がふんわりとしている方には

「退屈なことはPythonにやらせよう」もおススメです。

こちらの本は自動化に集中した内容となっており、流し読みで自分のスキルを高めることができます。僕もだいぶお世話になりました(笑)

 

 

有料の動画講座に関して言えばUdemyさんがおすすめです。

 

こちらのサイトは初学がある程度すすんでいる方向けです。

 

有料だけに講座ごとのジャンルが豊富で学びたい講座を選択して選ぶことが出来ます。
PythonではAI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで10万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます。

 

お疲れさまでした。

 

にほんブログ村 投資ブログ 投資情報へ
にほんブログ村