退屈なことはPythonにやらせよう16章まで進んで来ました。
今日はPythonでGmai送信をやってみましたが、
本に書かれているコードそのまま書くとちょっと気になる動作してましたので、修正した後のコードも載せていきます。
気になるコード(動作)
本の中のサンプルコードを実装した場合(しようとした場合)にうまく動作していなかった事は次の3つ。
- Googleの2段階認証について
- 宛先設定について
- 日本語本文の送信について
1はsmtpサーバーに接続する際のメールアドレスとパスワードの設定値について。
Gmailなんかはセキュリティ向上のため2段階認証を進めてきています。
言われるがままに2段階認証を設定している場合、アカウントパスワードを設定しても認証エラーが発生します。
アプリ用のパスワードをGoogle側で作成して、そのパスワードを設定します。
手順はこちらを参照。
2.宛先設定について
サンプルコードではsendmail()でのみ送信先アドレスを設定してます。
1 |
smtp_obj = smtplib.SMTP('smtp.gmail.com', 587)<br>・・・<br>smtp.obj.sendmail('from_address', 'to_address', 'message') |
これだと、bccでメール送信されていました。
3.日本語本文の送信について
サンプルコードではMIMETextを使って、メッセージを組み立てましょう。
となっていましたが、これで書くとメッセージ本文が拡張子不明の添付ファイルになって送信されていました。
コードはこんな感じ
1 |
msg = MIMEText('日本語の本文', 'plain', 'iso-2022-jp')<br>smtp_obj.sendmail('from_address', 'to_address', msg.as_string()) |
送られてくるメールはこう
書き換えた全文コード
宛先がToで送信されるのと、
日本語を含む本文もしっかりと送信されるように修正したコードがこちら。
1 |
import smtplib<br>from email.mime.text import MIMEText<br><br>from_address = '送信元アドレス'<br>to_address = '宛先アドレス'<br><br>msg = MIMEText('日本語の本文', 'plain')<br>msg['Subject'] = 'これがメール件名です'<br>msg['From'] = from_address<br>msg['To'] = to_address<br><br>smtp_obj = smtplib.SMTP('smtp.google.com', 587)<br>smtp_obj.ehlo()<br>smtp_obj.starttls()<br>smtp_obj.login(from_address, 'パスワード')<br><br>smtp_obj.sendmail(from_address, to_address, msg.as_string())<br>smtp.quit() |
だんだんとノンプログラマーには対処厳しくなってきたと感じるんですが、
大丈夫なんでしょうかね?
コメント