Python学習【365日チャレンジ!】132日目のマスターU(@Udemy11)です。
昨日、アフリカでのバッタ大量発生の話に少し触れましたが、大量発生というと、ある周期で大量発生するセミがいたよな〜。と思ったので、ちょっと調べてみました。
そのセミの名前は、
素数セミ
1とその数でしか割ることができない素数の周期で大量発生するセミで、命名したのもその謎を解明したのも日本人だそうです。
そして、アメリカには、13年周期と17年周期で大量発生する素数セミがいるらしく、その発生数はなんと数十億匹!!
どうやら来年2021年にニューヨーク付近で大量発生するらしいですよ。
それでは、今日もPython学習をはじめましょう。
昨日の復習
昨日は、PythonからGmailを使ってE-mailを送信する方法ついて学習しました。
基本は、2日前に学習したOutlookの設定と同じですが、Googleはセキュリティーが厳しいので、事前にアカウント設定からセキュリティレベルを下げておく必要がありました。
セキュリティを下げるので、メインで使っているアカウントを使用するのではなく、テスト用アカウントを作成して運用するか、プログラムに組み込む場合は、メール送信専用のアカウントにしたほうがいいということでした。
詳しくは昨日の記事をごらんください。
今日は、もう一つのフリーメールの代表であるYahoo!メールをPythonで送信してみます。
Yahoo!メールの設定
Google同様に、事前にYahoo!メールの設定をしておく必要があります。
Yahoo!メールの設定【IMAP/POP/SMTPアクセスとメール転送】で、【Yahoo! JAPAN公式サービス以外からのアクセスも有効にする】をチェックして、SMTPが有効になっていることを確認します。
事前設定はこれだけですが、Yahoo!メールもテスト用アカウントを取得しておいたほうがいいでしょう。
Yahoo!メールを送信するコード
基本、これまでのOutlookメールとGmailとほぼ一緒のコードになりますが、今回はメール送信に必要な情報を入れたconfig.py
を作成し、読み込んで変数に代入する方法をとってみました。
config.py
smtp_host_y = 'smtp.mail.yahoo.co.jp'
smtp_port = 587
from_email_y = 'udemyfun@yahoo.co.jp'
to_email = 'master@udemyfun.com'
username_y = 'udemyfun'
password_y = 'yafuyafuyahho'
py0621.py
from email import message
import smtplib
import config
smtp_host = config.smtp_host_y
smtp_port = config.smtp_port
from_email = config.from_email_y
to_email = config.to_email
username = config.username_y
password = config.password_y
msg = message.EmailMessage()
msg.set_content('Test mail from yahoo mail')
msg['Subject'] = 'Test Yahoo!mail'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.login(username, password)
server.send_message(msg)
server.quit()
4行目でconfig
モジュールを読み込んで、保存している変数を利用しています。
これまでの設定と違うところは、21行目の次にあったserver.startls()
とserver.ehlo()
の2行がなくなっているということです。
これは、Yahoo!mailがstarttls
というサポートサービスに対応していないからです。
メールを受信
Yahoo!mailから送信したメールがこちら
当たり前ですが、これまでに学習してきたOutlookやGmailと同じですね。
送信できずにエラーが起こる場合は、設定のどれかの値が間違っていたり、単純なタイプミスだったりしますが、原因はコンソールに出力されているので、エラーメッセージから原因を突き止めて修正しましょう。
正解は一つじゃない
今回は、config
ファイルを作成して、設定を保存しましたが、例えばメインのファイル内で変数を定義せずに、config.py
で設定した変数config.smtp_host_y
などを直接20行目に代入して次のように書くこともできます。
server = smtplib.SMTP(config.smtp_host_y, config.smtp_port)
ただ、ファイル内の変数を定義しておいたほうが、使い回しはしやすいです。
Gmail用の設定もconfig.py
に保存しておいて、実行ファイルの7行目から12行目の変数に代入すれば、ファイル送信コード内(20行目〜24行目)の変数を変更する必要がなく、最初の変数に代入する変数を変更すればいいだけです。
Pythonからメールを送信するコードについては、ここで紹介しているコードだけが正解ではありません。
いろいろなコードの書き方があるので、自分が一番書きやすくて、きれいだと思うコードを目指しましょう。
それでは、明日もGood Python!
私が学習している超おすすめのPython講座がこちら!(マジでおすすめです!)