Pythonで自動メールメッセージを送信する方法

商用の電子メールクライアントはユーザーフレンドリーなGUIの便利さを提供しますが、多くの開発者やコンテンツ作成者が電子メールのニーズに求める柔軟性とカスタマイズ性に欠けていることがよくあります。

ソーシャルメディアチャネルで新しいサブスクライバーに感謝のメールを送信する場合でも、最新のプロジェクトにメール機能を追加する場合でも、PythonでSMTPを使用して自動メッセージを送信する機能は便利です。

今日あなたのマシンで実行されている電子メールを送信するためのPythonスクリプトを取得する方法を見つけるために読んでください。

SMTPとは何ですか?

簡単に言うと、SMTP(Simple Mail Transfer Protocol)は、メールサーバーがインターネット経由で電子メールを送信するための通信プロトコルです。

これは、TCP / IPスイートのアプリケーション層の不可欠な部分であり、インターネットまたは他の同様のネットワークを介した通信に使用される一連のプロトコルです。 SMTPが実装されているネットワークでは、ストアアンドフォワードと呼ばれるプロセスがネットワーク間でのメールの移動に役立ちます。

各エンドポイントで、メール転送エージェント(MTA)と呼ばれるソフトウェアは、ストアアンドフォワードを使用して、参加しているSMTPサーバー間の通信を容易にします。したがって、SMTPの主な役割は、メールがネットワーク内のあるポイントから別のポイントに移動する場所と方法を指示することです。

入門

このプログラムを使用してメールを送信するには、メールアカウントが必要です。これは、メールクライアントのSMTPサービスを使用してメールを送信するためです。このチュートリアルでは、Gmailを使用します。

ローカルSMTPデバッグサーバーを使用してテストメールを送信することもできますが、今のところ、より直感的であるため、メールアカウントを使用してメールを送信します。

既存のGmailアカウントを使用することもできますが、プログラムをいじってみると、すぐにテストメールでいっぱいになる可能性があります。これが、テストの目的で「使い捨て」アカウントを作成することをお勧めする理由です。

次に、 安全性の低いアプリがGmailアカウントにアクセスできるようにするオプションをオンにします。これは、使い捨ての電子メールを使用するもう1つの理由です。これは、メインの電子メールのプライバシー設定をいじることは推奨されないためです。

Pythonでメールを書く

Python 3には、SMTPサーバーでの作業に使用できるsmtplib(smtpライブラリの略)と呼ばれるモジュールがプリインストールされています。

他のPythonモジュールと同様に、最初に行う必要があるのはsmtplibをインポートすることです。

 import smtplib

SMTPオブジェクトの初期化

これで、smtplibを使用してSMTPオブジェクトを作成できます。これにより、従来の電子メールクライアントのほとんどの機能が提供されます。ただし、SMTPオブジェクトの関数は、インスタンスメソッドを介してのみ使用できます。したがって、当然、次のステップはオブジェクトインスタンスを宣言することです。

 mySMTP = smtplib.SMTP("smtp.google.com")

これにより、GoogleのSMTPサーバーを使用してメールを送信するようにSMTPオブジェクトが構成されます。

この後、送信者と受信者の電子メールを指定します。ここで、前に作成したGmailアカウントが役立ちます。

 emailSender = “senderMail@sender.com”
myThroaway = "myEmail@gmail.com"
emailRecipients = [myThroaway]

ここで注意すべきことの1つは、受信者リストは実際には配列であるということです。つまり、非アトミック値を格納するように設計されています。その結果、このフィールドでメーリングリスト全体を指定することもできます。

メッセージを書く

おそらくプロセスの最も簡単な部分です。ここでは、新しい電子メールを作成するときに通常追加する値を入力する必要があります。これも:

  • 送信者の詳細
  • 受信者の詳細
  • 件名
  • メッセージ本文

これらのフィールドは三重引用符で囲まれ、次のように区切られます。

 newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""

メールの送信

最後に、sendmailコマンドを使用して、SMTPサーバーから受信者のサーバーにメールを送信できます。

 mySMTP.sendmail(emailSender, emailRecipients, newEmail)

さて、最後のステップは1つだけです。それは、予測可能なプログラムのクラッシュを防ぐためにコードを再編成することです。

Pythonメールプログラムのトラブルシューティング

SMTPサーバーが受信者の接続との接続を確立できない場合や、SMTPポート間での電子メールの送信に問題がある場合があります。このような場合、プログラムが予期せずクラッシュする可能性があります。

このような可能性を説明するために、 try-exceptブロックを使用して、エラーが発生しやすいステートメントをtryブロック内に配置できます。プログラム全体とtry-exceptブロックは、次のようになります。

 import smtplib
emailSender = “senderMail@sender.com”
myThroaway = 'my_email@gmail.com'
emailRecipients = [myThroaway]
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
smtpObj = smtplib.SMTP('smtp.gmail.com')
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
print (“Email sent successfully!”)
except SMTPException:
print ("Error: There was an error in sending your email.")

メールの保護

実際の設定でPythonを使用してメールを送信する場合は、通信が両端で安全であることを確認することが重要です。

デフォルトのポートで単純なSMTPサーバーを使用しても、通信に暗号化レイヤーは提供されません。これは、サードパーティがネットワークでリッスンしている場合、ログイン資格情報と電子メールに含まれる情報にアクセスできることを意味します。

この問題を回避する1つの方法は、TLS(Transport Layer Security)プロトコルを使用して通信を暗号化することです。これは、GmailやOutlookなどの主要な電子メールクライアントが電子メールを悪用しないようにするために使用するのと同じプロトコルです。

そのためには、以前に作成したプログラムにいくつかの小さな変更を加える必要があります。

もちろん、最初のステップは、 smtplibと一緒にsslライブラリをインポートすることですsslライブラリを使用すると、両端の特定のポートに接続することで、安全なSSLコンテキストを作成し、暗号化されたネットワークを介して通信することができます。

安全なSSLコンテキストは、暗号、プロトコルバージョン、信頼できる証明書、TLSオプション、およびTLS拡張のコレクションに他なりません。

これに続いて、TLSポートを指定し、いくつかのsslライブラリ関数を追加して安全なメール送信者を作成できます。

すべての変更が加えられたコードは、次のようになります。

 import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "my_email@gmail.com"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
server = smtplib.SMTP(smtpServer,port)
server.starttls(context=context)
server.login(newEmail, password)
except Exception as e:
print("the email could not be sent.")
finally:
server.quit()

以前と同様に、プログラムの突然のクラッシュを防ぐために、try-exceptブロックでSMTPインスタンスを作成して使用する必要があります。

このPythonスクリプトでできること

コードを使用して電子メールを自動化するという驚くほど便利なスキルを習得したので、さまざまなメーリングリストに電子メールを送信する必要があるあらゆるプラットフォームに適用できます。

個人のWebサイトで使用して自動確認メールを送信することから、クリスマスカードや招待状を家族や友人にメールで送信することまで、この小さなPythonスクリプトの使用はあなた自身の創造性によってのみ制限されます。

また、これはPythonで実行できる多くのすばらしいことの1つにすぎません。ユビキタスな開発者サポートと習得しやすい構文により、Pythonスキルの習得がこれまでになく簡単になりました。

コードを使用してクールなものを構築し続けるには、Python3を使用して独自のTelegramボット構築する方法に関するガイドを確認してください。