Udemy講座 Pythonista SMTPHandler

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モジュールです。

酒井さんの講座では、logginglogging.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モードでサーバーとやり取りするときにkeyfilecertfilecontextを引数に指定しますが、Outlookでは不要なため、この3つの引数にNoneを指定しています。

最後の26行目で、CRITICALのログメッセージを出力しています。

最初にロガーを生成した段階で、レベルをCRITICALに設定しているので、ERROR以下のログは出力されません。

受信したメールは次のようになります。

Udemy講座 Pythonista SMTPHandler

出番はあまりない?

SMTPHandlerを使ってログをメールで送信する方法を学習しましたが、このやり方はあまり出番がありません。

というのが、最近では、ログ解析ツールなどに情報を送って、ログを解析した結果をツールからメールで送るというやり方が主流になっているからです。

エラーが連続して起こってしまった時に、ログのメール送信のためにシステムに負荷がかかってしまうことになってしまうからです。

ひとまず、SMTPHandlerを使ってログをメールで送ることができるという理解をしておくといいでしょう。

いろいろと試す

現在、Udemyの講座である酒井さんの「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」を受講しつつ、学習したPythonの使い方を健忘録的にブログにしていますが、講座の内容を写経するだけではスキルは身につきません。

Udemy講師 酒井さん プログラミング Python

講座の中のコードを少しかえてみたり、レクチャーをみないで一からコードを書いてみたり、何度も同じレクチャーを復習したりすることで少しずつ自分のものになっていきます。

このPython学習365日チャレンジ!で何度もお伝えしていますが、重要なことは、

好奇心を持っていろいろと試すこと

です。

ぜひ、疑問に思ったことをいろいろと試すようにしてみてください。

次に同じコードを見たときには、その試した記憶が蘇ってくる【あは体験】ができること間違いなしです。

それでは、明日もGood Python!