Python学習【365日チャレンジ!】130日目のマスターU(@Udemy11)です。
無性に釣りに行きたくなったので、ちょっとだけ近くの池にバスを釣りに行ってきました。
短時間でしたが、ほどほどに連れてくれたので、楽しく遊ぶことができました。
ほんとなら、食べる魚を釣るほうがいいんだろうな〜とは思うんです。
だって、口に針を引っ掛けられて釣り上げられるわけですから、遊びでそんなことされると困っちゃいますよね。
思わず、漫画のGANZで巨人たちが人間狩りをして遊ぶシーンを思い出してしまいます。
なので、次は食べるための魚を釣るため、アジングかショアジギングに行こうと思っています。
それでは今日もPython学習をはじめましょう!
昨日の復習
昨日は、実際のロギングのコードの書き方について学習しました。
本来なら、ファイルにロギングコンフィグをまとめて読み込んで使いますが、使うポイントを抑えるだけなので、必要最小限の記述を最初に設定し、CSVファイルに取得した情報を書き込むメソッドにロギングのコードを追加しました。
ログはあとから分析しやすいように、key-value
形式の辞書型データにしました。
CSVのファイルを開く前と、値を書き込んだあとにログを記録することで、エラーが起こっているコードの場所を特定しやすくなりました。
ログを取るからには、後でそのログを分析しやすいような工夫が必要でした。
詳しくは、昨日の記事をごらんください。
E-mail送信
今日は、一旦ロギングから離れて、PythonからE-mailを送信する方法を学習します。
まずは、Outlookを使ってメールを送信する方法についてみていきましょう。
from email import message
import smtplib
smtp_host = 'smtp.office365.com'
smtp_port = 587
from_email = 'udemyfun@outlook.jp'
to_email = 'master@udemyfun.com'
username = 'udemyfun@outlook.jp'
password = 'XXXxxxXXXxxXXxx'
msg = message.EmailMessage()
msg.set_content('Test mail')
msg['Subject'] = 'Test mail subject'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.send_message(msg)
server.quit()
Outlookにログインして、設定から【メールを同期】の項目を見ると次のようなSMTPの設定項目が表示されます。
- サーバー名: smtp.office365.com
- ポート: 587
- 暗号化方法: STARTTLS
このSMTPの設定に従って必要なデータを記述していきます。
1行目と2行目で必要なモジュールemail
とsmtplib
をインポートします。
5行目から10行目までは必要な変数を定義しています。
これらの値は、12行目から24行目までのコードの変数を代入しているところに直接記述しても問題はありません。
12行目から16行目でメールの本文や件名、送信元と送信先のアドレスなどを変数msg
に代入しています。
18行目から24行目までがサーバーとのやり取りですが、19,20,21行は、サーバーと「こんにちは〜TLSモードでつなぐよ〜いいか〜い」というようなやり取りをするコードです。
その後、username
とpassword
でサーバーにログインし、メッセージを送信したあと、サーバーとのやり取りを終了しています。
Outlookのメール送信
すでにOutlookのアカウントを持っていて、メールのやり取りをしている場合は問題ないのですが、Outlookのアカウントを作ってすぐの場合、メール送信をするには、電話番号での本人認証が必要です。
この認証をする前に、Pythonからメール送信を実行するとエラーが返されてしまいます。
さらに、これを何度も繰り返して実行するとアカウントがロックされてしまうので、注意しましょう。
まずは、電話認証を済ませて、Outlookで自分宛てにメールが送信できるのを確認してから、Pythonでメール送信してみてください。
送信したメール
Pythonを実行すると、サーバーとのやり取りを行うので、コードの実行完了までに数秒時間がかかります。
完了すると、コンソールにProcess finished with exit code 0
と表示されるので、メールが届いていると思います。
いろんな方法がありそう
今回はOutlookメールの送信を試してみましたが、Hotmailも同じように、SMTPサーバーを変更して送信することが可能です。
AnacondaでPythonをインストールしていればデフォルトでpywin32
ライブラリがインストールされているので、このライブラリを使ってOutlookメールを送信したり受信したりできるだけでなく、Excelの操作をすることもできるようです。
目的の結果を求める方法は、幾通りものコードの書き方があるように、メール送信一つとっても色々なコードの書き方があるようです。
いろいろなやり方を知るのはいいことですが、器用貧乏にならないように、一つの使い方を極めることも大切です。
メインで使う方法をしっかりとマスターしたうえで「こんな使い方もあるんだ」程度に理解しておくといいでしょう。
それでは、明日もGood Python!