Python3-SMTPを使用したメールの送信
Simple Mail Transfer Protocol(SMTP)は、電子メールの送信とメールサーバー間の電子メールのルーティングを処理するプロトコルです。
Pythonは提供します smtplib モジュール。SMTPまたはESMTPリスナーデーモンを使用して任意のインターネットマシンにメールを送信するために使用できるSMTPクライアントセッションオブジェクトを定義します。
これは、後で電子メールを送信するために使用できる1つのSMTPオブジェクトを作成するための簡単な構文です。
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
パラメータの詳細は次のとおりです-
host−これはSMTPサーバーを実行しているホストです。ホストのIPアドレスまたはtutorialspoint.comのようなドメイン名を指定できます。これはオプションの引数です。
port−ホスト引数を指定する場合は、SMTPサーバーがリッスンしているポートを指定する必要があります。通常、このポートは25になります。
local_hostname− SMTPサーバーがローカルマシンで実行されている場合は、localhostのみオプションを指定できます。
SMTPオブジェクトには、というインスタンスメソッドがあります sendmail、通常、メッセージをメールで送信する作業を行うために使用されます。それは3つのパラメータを取ります-
送信者-送信者のアドレスを持つ文字列。
受信機-文字列のリスト、各受信者の1。
メッセージ-様々なRFCで指定されるようにフォーマットされた文字列としてメッセージ。
例
Pythonスクリプトを使用して1つの電子メールを送信する簡単な方法を次に示します。一度試してみてください-
#!/usr/bin/python3
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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"
ここでは、ヘッダーを正しくフォーマットするように注意しながら、三重引用符を使用して基本的な電子メールをメッセージに配置しました。電子メールにはFrom、 To、および Subject 電子メールの本文から空白行で区切られたヘッダー。
メールを送信するには、smtpObjを使用してローカルマシンのSMTPサーバーに接続します。次に、sendmailメソッドを、メッセージ、差出人アドレス、および宛先アドレスとともにパラメーターとして使用します(差出人アドレスと宛先アドレスは電子メール自体の中にありますが、これらは常にメールのルーティングに使用されるとは限りません)。
ローカルマシンでSMTPサーバーを実行していない場合は、smtplibクライアントを使用してリモートSMTPサーバーと通信できます。Webメールサービス(GmailやYahoo! Mailなど)を使用している場合を除き、電子メールプロバイダーは、次のように、提供できる送信メールサーバーの詳細を提供している必要があります。
mail = smtplib.SMTP('smtp.gmail.com', 587)
Pythonを使用してHTML電子メールを送信する
Pythonを使用してテキストメッセージを送信すると、すべてのコンテンツが単純なテキストとして扱われます。テキストメッセージにHTMLタグを含めても、単純なテキストとして表示され、HTMLタグはHTML構文に従ってフォーマットされません。ただし、Pythonには、HTMLメッセージを実際のHTMLメッセージとして送信するオプションがあります。
電子メールメッセージの送信中に、HTML電子メールを送信するためのMimeバージョン、コンテンツタイプ、および文字セットを指定できます。
例
以下は、HTMLコンテンツを電子メールとして送信する例です。一度試してみてください-
#!/usr/bin/python3
import smtplib
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
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。次に、テキストと添付ファイルのセクションを内で指定できますboundaries。
境界は、2つのハイフンで始まり、その後に一意の番号が続きます。これは、電子メールのメッセージ部分には表示できません。電子メールの最後のセクションを示す最後の境界も、2つのハイフンで終わる必要があります。
添付ファイルは、 pack("m") 送信前にbase64エンコーディングを使用する関数。
例
以下はファイルを送信する例です /tmp/test.txt添付ファイルとして。一度試してみてください-
#!/usr/bin/python3
import smtplib
import base64
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
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, reciever, message)
print "Successfully sent email"
except Exception:
print ("Error: unable to send email")