Python学習【365日チャレンジ!】134日目のマスターU(@Udemy11)です。
最近体重が右肩上がりで困っています。
自粛期間中に食べすぎたのが原因ですが、そのせいで胃が大きくなったのか、どうにもお腹が空くんですよね。
この空腹感を我慢して、1ヶ月位過ごせればなれてくるんでしょうけど、ついついお菓子などに手が伸びてしまうんです。
ほんとどうにかなりませんかね、この空腹感。。。
気を紛らわせるためにも、Python学習に集中します。
昨日の復習
昨日は、Pythonからファイルを添付したE-mailを送信する方法ついて学習しました。
簡易なメッセージを送るemail.message
モジュールではなく、email.mime.multipart
モジュールとemail.mime.text
モジュールをインポートして、実行ファイルをプレーンテキストにして添付ファイルとして送信しました。
ヘッダーに添付するのですが、Content-Disposition
ヘッダーフィールドには、本文にそのまま表示するinline
と添付ファイルとして付け加えるattachment
のどちらかを選択しました。
メール送信のコードは、通常のメール送信の場合と同じでしたね。
詳しくは昨日の記事をごらんください。
それでは、今日は、ロギングでSMTPHandler
を使ったメール送信を学習しましょう。
読み込むモジュール
最初に読み込むモジュールはlogging.handlers
と設定ファイルのconfig
モジュールです。
酒井さんの講座では、logging
とlogging.handler
をインポートしていましたが、logging.handlers
だけでlogging.getLogger
をカバーできているみたいなので、logging
はインポートしていません。
import logging.handlers
import config
ちなみに、config.py
の中身は次のようになっています。
from_email = 'udemyfun@outlook.jp'
smtp_host = 'smtp.office365.com'
smtp_port = 587
username = 'udemyfun@outlook.jp'
password = 'outlookmailnopassword'
必要な情報を変数に代入
次に、メール送信に必要な情報をconfig
から読み込んで変数に代入します。
こちらのコードはこれまでに学習したメール送信のコードと同じです。
smtp_host = config.smtp_host
smtp_port = config.smtp_port
from_email = config.from_email
to_email = 'master@udemyfun.com'
username = config.username
password = config.password
メール送信のための情報をconfig
ファイルなどにまとめておくと使い回しができて便利です。
ロガーの設定&ログの出力
次にロガーを生成して、SMTPHandler
を設定します。
logger = logging.getLogger('email')
logger.setLevel(logging.CRITICAL)
logger.addHandler(logging.handlers.SMTPHandler(
(smtp_host, smtp_port),
from_email,
to_email,
subject='Logging test from SMTPHandler',
credentials=(username, password),
secure=(None, None, None),
timeout=20
))
logger.critical('This is logging test from smtphandler')
ロガーの生成はこれまでの学習と同様ですが、引数にロガーの名前email
を指定しています。
ロギングのレベルはCRITICAL
に設定しています。
次にロガーにハンドラーを渡しますが、SMTPHandler
の引数は順番に、タプルでホストとポートを指定、送信元アドレスfrom_email
、宛先アドレスto_email
、件名subject
、認証情報credentials
、セキュリティーsecure
、タイムアウトtimeout
を指定します。
このあたりの引数のことは、Python公式ドキュメントに詳しく記述されているので、一度目を通してみてください。
22行目の引数secure
は、TLSモードでサーバーとやり取りするときにkeyfile
とcertfile
、context
を引数に指定しますが、Outlookでは不要なため、この3つの引数にNone
を指定しています。
最後の26行目で、CRITICAL
のログメッセージを出力しています。
最初にロガーを生成した段階で、レベルをCRITICAL
に設定しているので、ERROR
以下のログは出力されません。
受信したメールは次のようになります。
出番はあまりない?
SMTPHandler
を使ってログをメールで送信する方法を学習しましたが、このやり方はあまり出番がありません。
というのが、最近では、ログ解析ツールなどに情報を送って、ログを解析した結果をツールからメールで送るというやり方が主流になっているからです。
エラーが連続して起こってしまった時に、ログのメール送信のためにシステムに負荷がかかってしまうことになってしまうからです。
ひとまず、SMTPHandler
を使ってログをメールで送ることができるという理解をしておくといいでしょう。
いろいろと試す
現在、Udemyの講座である酒井さんの「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」を受講しつつ、学習したPythonの使い方を健忘録的にブログにしていますが、講座の内容を写経するだけではスキルは身につきません。
講座の中のコードを少しかえてみたり、レクチャーをみないで一からコードを書いてみたり、何度も同じレクチャーを復習したりすることで少しずつ自分のものになっていきます。
このPython学習365日チャレンジ!で何度もお伝えしていますが、重要なことは、
好奇心を持っていろいろと試すこと
です。
ぜひ、疑問に思ったことをいろいろと試すようにしてみてください。
次に同じコードを見たときには、その試した記憶が蘇ってくる【あは体験】ができること間違いなしです。
それでは、明日もGood Python!