PythonでSMTPを使ったメール送信をGmailを使ってやる方法

スポンサーリンク

本日は、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!

Happy to hear from you!
With regards,
Developer"

 
# 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}

{body}"

 
# We'll be sending this message in the above format (Subject:...

Body)

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!

Happy to hear from you!
With regards,
Developer"

 
# 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}

{body}"

 
    # We'll be sending this message in the above format (Subject:...

Body)

    smtp_server.sendmail(sender_address, receiver_address, message)

sender_address,receiver_address,account_password` は必ずGmailのアカウント情報に置き換えてください!

Gmailのアカウントにアクセスするために、SMTPサーバを使用し、セキュアSMTP (SMTP_SSL) を使用しています。

さて、送信者と受信者に同じアカウントを入力すると、私のようなメールが送信されます。

Less Secure Access Gmail
Less Secure Access Gmail

中身を確認してみましょう。

Python Test Email
Python Test Email

Pythonを使ってちゃんとしたメールを送ることができました。

このコードを改良して、コンテキストマネージャを使って、リソースが常にクローズされるようにすることができます

Python Test Email Result
Python Test Email Result

これは前と同じ結果になります。

まとめ

今回は、Pythonを使って、gmailのSMTPサーバーを使って簡単にメールを送信する方法について見ていきました。

参考文献

  • Python SMTP ドキュメント
タイトルとURLをコピーしました