Python【完全】入門のメール関数、今年6月から使えずー新しいメール関数探しました

SB Creative(https://www.sbcr.jp/)が刊行している松浦健二郎・司ゆき共著の「Python【完全】入門」(初版2021年11月30日第5刷)は好著ですが、第二部12章Section02「システム管理の仕事を自動化する」で紹介されているメール送信関数は、Googleの設定変更で今年2022年05月30日から使えなくなりました。代わりのメール送信関数をインターネットのWebサイトから探してみました。

「Python【完全】入門」はWindows,Mac,Linux(Ubuntu)の主要OS(基本ソフト)に対応しており、第一部の文法編ではPythonの基本文法を詳細に解説、第二部の応用編ではExcelの仕事やシステム管理などの自動化のほか、AI技術やWebサイトから有用な情報を取り出すスクレイピング、軽量フレームワーク(Bottle)iによるWebアプリケーションの作成方法の初歩など、有用なPythonによるプログラミング手法(ただし、初心者向け)が解説されていて、Pythonに関する読み応えのある好著です。

ほとんどのプログラムはWindows,Mac,Linux(Ubuntu)といった現在主流のOSで動きますが、第二部12章Section02「システム管理の仕事を自動化する」で紹介されているメール送信関数は、Googleの設定変更で今年2022年06月から使えなくなりました。ここの箇所は本書462頁から470頁までですが、466頁以下で紹介されているメール送信関数は、GoogleのSMTPサーバーを使うことを前提に、安全性の低いアプリケーションでメール送信ができるように設定した上で記述されています。

しかし、今年2022年05月30日からGoogleが安全性の低いアプリケーションから同社のSMTPサーバーを使ってメールを送信することが出来ないように設定を変更しました。

アカウントを安全に保つため、2022 年 5 月 30 日より、Google は、ユーザー名とパスワードのみで Google アカウントにログインするサードパーティ製のアプリとデバイスについてサポートを終了いたします。(注:Googleサボート・ヘルプ)

このため、「Python【完全】入門」で紹介されているメール送信関数ではメールを送信することが出来ません。何よりも、466頁下段に説明されている②の設定(安全性の低いアプリケーションへの対応)が出来ません(注:Pythonが安全性の低い言語という意味ではなく、安全性の高いアプリケーションを作成することもできる。例えば、GoogleのYoutubeはPythonのWebフレームワークDjangoで作成されています)。これは困ったと思いましたがインターネットのWebサイトを調べているうちに、Googleの仕様変更に対応したメール送信関数を紹介しているサイトが分かりました。「YUKI.WORLD」さんの「【Python】Gmail × 2段階認証(アプリパスワード)での送信方法」(https://yuki.world/python-send-gmail-with-app-password/)というページです。

この投稿記事では、①二段階認証を有効化②「アプリパスワード」を発行ーしたことを前提に、メール送信関数を紹介しています。この記事を参考に、管理者あてにCPU使用率、メモリー使用率、ハードディスク使用率を送信するプログラムを書いてみました。

import psutil
from email.quoprimime import body_decode
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
from_address = ‘nomura2000x@gmail.com’
to_address = ‘michiaki_nomura@yahoo.co.jp’
bcc =
# 発行したアプリパスワード
app_password = ‘smligkkwgynhrgai’
subject = ‘PCの資源使用率’
# body = ‘このメールはネット(https://yuki.world/python-send-gmail-with-app-password/)から探したPythonによるメールです。’
body = f”’
CPU : {psutil.cpu_percent(interval=1):5} %
Memory: {psutil.virtual_memory().percent:5} %
Disk : {psutil.disk_usage(‘/’).percent:5} %
”’
def create_message(from_addr, to_addr, bcc_addrs, subject, body):
    msg = MIMEText(body, ‘html’)
    msg[‘Subject’] = subject
    msg[‘From’] = from_addr
    msg[‘To’] = to_addr
    msg[‘Bcc’] = bcc_addrs
    msg[‘Date’] = formatdate()
    print(type(msg))
    return msg
def send(from_addr, to_addrs, msg):
    smtpobj = smtplib.SMTP(‘smtp.gmail.com’, 587, timeout=15)
    smtpobj.starttls()
    smtpobj.login(from_address, app_password)
    smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
    smtpobj.close()
message = create_message(from_address, to_address, bcc, subject, body)
send(from_address, to_address, message)

 

このメール送信関数を実行すると、指定のメールアドレスにメールを送信できました。上記は、安全性に配慮したPythonによるメール送信関数の雛形です。ただし、詳細についてはimportするライブラリーをよく読む必要があります。

「Python【完全】入門」で紹介されている他のプログラムはLinux(Ubuntu)でも動作します。同著が気に入ったので取り敢えず投稿しました。


この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう