工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

PythonでSMTPメール送信:簡単・確実なガイド

SMTPとは

Simple Mail Transfer Protocol(SMTP)は、メールの送信とメールサーバー間のメールルーティングを処理するプロトコルです。

Pythonはsmtplibモジュールを提供しており、SMTPクライアントセッションオブジェクトを定義しています。これを使用して、SMTPまたはESMTPリスナーデーモンを持つ任意のインターネットマシンにメールを送信できます。

SMTPオブジェクトの作成

後にメール送信に使用できるSMTPオブジェクトを作成する簡単な構文:

import smtplib
smtpObj = smtplib.SMTP([host[, port[, local_hostname]]])

パラメータの詳細

SMTPオブジェクトにはsendmailというインスタンスメソッドがあり、通常メール送信の作業に使用されます。3つのパラメータを取ります:

基本的なメール送信例

Pythonスクリプトでメールを1通送信する簡単な方法です。試してみてください。

#!/usr/bin/python
import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person 
To: To Person 
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message)
    print("Successfully sent email")
except SMTPException:
    print("Error: unable to send email")

ここでは、トリプルクォートを使用して基本的なメールをmessageに配置し、ヘッダーを正しくフォーマットするように注意しています。メールにはFrom、To、Subjectヘッダーが必要で、これらはメール本文から空行で区切られます。

メールを送信するには、smtpObjを使用してローカルマシンのSMTPサーバーに接続し、メッセージ、送信元アドレス、宛先アドレスをパラメータとしてsendmailメソッドを使用します(fromとtoアドレスはメール内にもありますが、これらが常にメールのルーティングに使用されるわけではありません)。

ローカルマシンでSMTPサーバーを実行していない場合、smtplibクライアントを使用してリモートSMTPサーバーと通信できます。Webメールサービス(Hotmail、Yahoo! Mailなど)を使用していない限り、メールプロバイダーから送信メールサーバーの詳細が提供されているはずです。それらを以下のように指定できます。

smtplib.SMTP('mail.your-domain.com', 25)

HTMLメールの送信

Pythonでテキストメッセージを送信すると、すべてのコンテンツが単純なテキストとして扱われます。テキストメッセージにHTMLタグを含めても、単純なテキストとして表示され、HTMLタグはHTML構文に従ってフォーマットされません。しかし、PythonにはHTMLメッセージを実際のHTMLメッセージとして送信するオプションがあります。

メールメッセージを送信する際、MIMEバージョン、コンテンツタイプ、文字セットを指定してHTMLメールを送信できます。

例:HTMLコンテンツをメールとして送信

#!/usr/bin/python
import smtplib

message = """From: From Person 
To: To Person 
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format
This is HTML message.

This is headline.

""" try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print("Successfully sent email") except SMTPException: print("Error: unable to send email")

添付ファイル付きメールの送信

複合コンテンツのメールを送信するには、Content-typeヘッダーをmultipart/mixedに設定する必要があります。その後、テキストと添付ファイルのセクションを境界内で指定できます。

境界は、メールのメッセージ部分に出現しない一意の番号に続く2つのハイフンで始まります。メールの最終セクションを示す最終境界も、2つのハイフンで終わる必要があります。

添付ファイルは、送信前にpack("m")関数でエンコードしてbase64エンコードする必要があります。

例:/tmp/test.txtを添付ファイルとして送信

#!/usr/bin/python
import smtplib
import base64

filename = "/tmp/test.txt"
# ファイルを読み込みbase64形式でエンコード
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = 'webmaster@tutorialpoint.com'
receiver = 'amrood.admin@gmail.com'
marker = "AUNIQUEMARKER"

body = """This is a test email to send an attachment."""

# メインヘッダーを定義
part1 = """From: From Person 
To: To Person 
Subject: Sending Attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# メッセージアクション部分を定義
part2 = """Content-Type: text/plain
Content-Transfer-Encoding: 8bit
%s
--%s
""" % (body, marker)

# 添付ファイルセクションを定義
part3 = """Content-Type: multipart/mixed; name="%s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" % (filename, filename, encodedcontent, marker)

message = part1 + part2 + part3

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receiver, message)
    print("Successfully sent email")
except Exception:
    print("Error: unable to send email")

Python

  1. Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
  2. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  3. Python データ型マスター: 実践ガイド
  4. Python 演算子完全マスター: 包括的ガイド
  5. Python pass文完全マスター: 実践ガイド
  6. Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
  7. Python辞書完全ガイド:作成、操作、高度なテクニック
  8. Python例外処理マスター:try、except、else、finallyを徹底解説
  9. Pythonで平均を計算する:実践ガイド
  10. Pythonで一時変数なしで2変数をスワップするワンライナー
  11. Javaでメールを送信する方法:ステップバイステップガイド