本日は、Pythonを使ってメールを送信する方法をご紹介します。
Sending Emails – A brief overview
通常、電子メールを送信する作業は、MTP(Mail Transfer Protocol)を使って行われます。
現代では、SMTP (Simple Mail Transfer Protocol) と呼ばれる別のプロトコルがあり、これが電子メール送信のプロトコルとして広く使われている。
このプロトコルは、他のプロトコルと同様に、クライアント・サーバーベースで動作します。
電子メールをターゲットマシーンに送信したい場合、我々(クライアント)はメールの内容をSMTPサーバーに送信する必要がある。
サーバーは、それを目的のターゲットマシーンにルーティングします。
つまり、電子メールを送るためには、SMTP Serverを使う必要がある。
Pythonでメールを送信するための前提条件設定
このチュートリアルの続きを読む前に、メール送信のテストに使用するダミーのgmailアカウントをセットアップしておくことをお勧めします。
ダミーアカウントの設定後、もう1つ必要なことがあります。
デフォルトでは、GmailアカウントはSMTPのような安全性の低いアプリケーションからのアクセスを許可するように設定されていません。
このアクセスをアカウントで有効にする必要があります。
Gmailアカウントの設定ページに移動して、Googleアカウントからのアクセスを有効にすることができます。
import smtplib
|
これでPythonを使ったメール送信の準備が整いました。
では、次に進みましょう。
Python SMTP を使ったメールの送信
PythonにはSMTPクライアントライブラリ(smtplib
)があり、SMTPサーバ(Gmail)にメールを送信する際に使用します。
これは標準ライブラリの一部なので、直接インポートすることも可能です
import smtplib
sender_address = "sender@gmail.com" # Replace this with your Gmail address
receiver_address = "receiver@gmail.com" # Replace this with any valid email address
account_password = "xxxxxxxxxx" # Replace this with your Gmail account password
subject = "Test Email using Python"
body = "Hello from Python!
# Endpoint for the SMTP Gmail server (Don't change this!) smtp_server = smtplib.SMTP_SSL( "smtp.gmail.com" , 465 )
# Login with your Gmail account using SMTP smtp_server.login(sender_address, account_password) # Let's combine the subject and the body onto a single message message = f "Subject: {subject}
# We'll be sending this message in the above format (Subject:...
smtp_server.sendmail(sender_address, receiver_address, message) # Close our endpoint smtp_server.close() |
さて、それではテストメールを送信するスクリプトを書いてみましょう。
SMTPを利用したメールには、以下の内容が必要です。
- 送信者アドレス
- 受信者アドレス
- 件名(オプション)
- メールの本文
全部書いてみましょう。
import smtplib
sender_address = "sender@gmail.com" # Replace this with your Gmail address
receiver_address = "receiver@gmail.com" # Replace this with any valid email address
account_password = "xxxxxxxxxx" # Replace this with your Gmail account password
subject = "Test Email using Python"
body = "Hello from Python!
# We can use a context manager with smtplib.SMTP_SSL( "smtp.gmail.com" , 465 ) as smtp_server:
# Login with your Gmail account using SMTP
smtp_server.login(sender_address, account_password)
# Let's combine the subject and the body onto a single message
message = f "Subject: {subject}
# We'll be sending this message in the above format (Subject:...
smtp_server.sendmail(sender_address, receiver_address, message)
|
sender_address,
receiver_address,
account_password` は必ずGmailのアカウント情報に置き換えてください!
Gmailのアカウントにアクセスするために、SMTPサーバを使用し、セキュアSMTP (SMTP_SSL
) を使用しています。
さて、送信者と受信者に同じアカウントを入力すると、私のようなメールが送信されます。
中身を確認してみましょう。
Pythonを使ってちゃんとしたメールを送ることができました。
このコードを改良して、コンテキストマネージャを使って、リソースが常にクローズされるようにすることができます。
これは前と同じ結果になります。
まとめ
今回は、Pythonを使って、gmailのSMTPサーバーを使って簡単にメールを送信する方法について見ていきました。
参考文献
- Python SMTP ドキュメント