Pythonを使用してメールを送信する

学習演習として、私は最近Python 3を掘り下げて、大量の電子メールを送信する方法を確認しました。実稼働環境でこれを行うより簡単な方法があるかもしれませんが、以下は私にとってうまくいきました。

だから、ここにシナリオがあります:あなたはたくさんの連絡先の名前と電子メールアドレスを持っています。そして、メッセージの上部に「Dear [name]」を追加しながら、これらの連絡先のそれぞれにメッセージを送信したいとします。

簡単にするために、連絡先の詳細をデータベースではなくファイルに保存できます。送信したいメッセージのテンプレートをファイルに保存することもできます。

Pythonのsmtplibモジュールは、基本的に、件名やそのような追加情報なしで、簡単な電子メールを送信するために必要なすべてです。ただし、実際の電子メールの場合は、件名と多くの情報が必要です。写真や添付ファイルも必要です。

これがPythonの電子メールパッケージの出番です。emailパッケージだけを使用して電子メールメッセージを送信することはできないことに注意してください。あなたは、両方の組み合わせを必要emailsmtplib

これらの両方の包括的な公式ドキュメントを必ず確認してください。

Pythonを使用してメールを送信するための4つの基本的な手順は次のとおりです。

  1. SMTPサーバーをセットアップし、アカウントにログインします。
  2. 作成しMIMEMultipartたメッセージオブジェクトを、適切なのヘッダとそれをロードしFromToし、Subjectフィールドに入力します。
  3. メッセージ本文を追加します。
  4. SMTPサーバーオブジェクトを使用してメッセージを送信します。

それでは、プロセス全体について説明します。

mycontacts.txt次のような連絡先ファイルがあるとします。

[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]

各線は単一の連絡先を表します。名前の後にメールアドレスが続きます。私はすべてを小文字で保存しています。必要に応じて、フィールドを大文字または大文字に変換するのはプログラミングロジックに任せます。これらはすべてPythonでは非常に簡単です。

次に、メッセージテンプレートファイルがありますmessage.txt

[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly

${PERSON_NAME}」という言葉に気づきましたか?これはPythonのテンプレート文字列です。テンプレート文字列は他の文字列に簡単に置き換えることができます。この例で${PERSON_NAME}は、すぐにわかるように、実際の人の名前に置き換えられます。

それでは、Pythonコードから始めましょう。まず、mycontacts.txtファイルから連絡先を読み取る必要があります。このビットを独自の関数に一般化することもできます。

この関数get_contacts()は、引数としてファイル名を取ります。ファイルを開き、各行(つまり、各連絡先)を読み取り、名前と電子メールに分割して、2つの別々のリストに追加します。最後に、2つのリストが関数から返されます。

また、テンプレートファイル(などmessage.txt)を読み込み、Templateその内容から作成されたオブジェクトを返す関数も必要です。

前の関数と同じように、この関数はファイル名を引数として取ります。

電子メールを送信するには、SMTP(Simple Mail Transfer Protocol)を使用する必要があります。前述のように、Pythonはこのタスクを処理するためのライブラリを提供します。

上記のコードスニペットでは、をインポートしてsmtplibから、SMTP接続をカプセル化するSMTPインスタンスを作成しています。これは、ホストアドレスとポート番号をパラメーターとして受け取ります。これらは両方とも、特定の電子メールサービスプロバイダーのSMPT設定に完全に依存します。たとえば、Outlookの場合、上記の4行目は代わりに次のようになります。

s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)

すべてが機能するためには、特定の電子メールサービスプロバイダーのホストアドレスとポート番号を使用する必要があります。

MY_ADDRESSそしてPASSWORD上記のあなたが使用しようとしているアカウントの完全なメールアドレスとパスワードを保持している二つの変数があります。

ここで、上記で定義した関数を使用して連絡先情報とメッセージテンプレートを取得する良い機会です。

names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')

それでは、これらの連絡先ごとに、個別にメールを送信しましょう。

それぞれの場合nameemail(連絡先ファイルから)、あなたは、のMimeMultipartオブジェクトを作成しているセットアップFromToSubjectキーワード辞書として、コンテンツタイプヘッダをし、その後にメッセージ本体を取り付けるMIMEMultipartプレーンテキストなどのオブジェクト。ドキュメントを読んで、実験できる他のMIMEタイプについて詳しく知ることをお勧めします。

また、上記の10行目${PERSON_NAME}では、Pythonのテンプレートメカニズムを使用して連絡先ファイルから抽出された実際の名前に置き換えていることにも注意してください。

この特定の例ではMIMEMultipart、ループを繰り返すたびにオブジェクトを削除して再作成しています。

それが完了したら、前に作成したSMTPオブジェクトの便利なsend_message()関数を使用してメッセージを送信できます。

完全なコードは次のとおりです。

どうぞ!コードはかなり明確になったと思います。

必要に応じて、自由にコピーして微調整してください。

公式のPythonドキュメントとは別に、私が大いに役立ったこのリソースについても言及したいと思います。

ハッピーコーディング:)

私はもともとこの記事をここに公開しました。この記事が気に入ったら、下の小さなハートを叩いてください。ありがとう!