Contents
Python電子メールを送信
SMTP(Simple Mail Transfer Protocol)は、メールサーバー間で電子メールの送信と電子メールのルーティングを処理するプロトコルです。
PythonはSMTPまたはESMTPリスナーデーモンを使用してインターネットマシンにメールを送信するために使用できるSMTPクライアントセッションオブジェクトを定義するsmtplibモジュールを提供します。
1つのSMTPオブジェクトを作成するための簡単な構文は、後で電子メールを送信するために使用できます。
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
パラメータの詳細は次のとおりです。
- host: SMTPサーバーを実行しているホストです。ホストのIPアドレスやtutorialspoint.comのようなドメイン名を指定することができます。これはオプションの引数です。
- ポート:あなたが提供している場合は、ホスト引数を、あなたはSMTPサーバがリッスンしているポートを指定する必要があります。通常、このポートは25です。
- local_hostname:SMTPサーバーがローカルマシン上で実行されている場合は、このオプションのlocalhostだけを指定できます。
SMTPオブジェクトには、sendmailと呼ばれるインスタンスメソッドがあります。このメソッドは、通常、メールを送信する作業を行うために使用されます。それは3つのパラメータを取る –
- 送信者 -送信者のアドレスを持つ文字列。
- 受信機 -文字列のリスト、各受信者の1。
- メッセージ -様々なRFCで指定されるようにフォーマットされた文字列としてメッセージ。
例
ここでは、Pythonスクリプトを使用して1つの電子メールを送信する簡単な方法があります。一度試してみてください –
#!/usr/bin/python import smtplib sender = 'from@fromdomain.com' receivers = ['to@todomain.com'] message = """From: From Person <from@fromdomain.com> To: To Person <to@todomain.com> 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メソッドをメッセージ、送信元アドレス、および送信先アドレスと共にパラメーターとして使用します(fromアドレスとtoアドレスがe -mail自体、これらはメールをルーティングするために常に使用されるわけではありません)。
ローカルマシン上でSMTPサーバーを実行していない場合は、smtplibクライアントを使用してリモートSMTPサーバーと通信できます。Webmailサービス(HotmailやYahoo! Mailなど)を使用している場合を除き、電子メールプロバイダは、次のように、送信可能なメールサーバーの詳細を提供している必要があります。
smtplib.SMTP('mail.your-domain.com', 25)
Pythonを使用してHTML電子メールを送信する
Pythonを使用してテキストメッセージを送信すると、すべてのコンテンツが単純なテキストとして扱われます。テキストメッセージにHTMLタグを含めても、単純なテキストとして表示され、HTMLタグはHTML構文に従ってフォーマットされません。しかし、PythonはHTMLメッセージを実際のHTMLメッセージとして送信するオプションを提供しています。
電子メールメッセージを送信するときに、Mimeバージョン、コンテンツタイプ、および文字セットを指定してHTML電子メールを送信できます。
例
次に、HTMLコンテンツを電子メールとして送信する例を示します。一度試してみてください –
#!/usr/bin/python import smtplib message = """From: From Person <from@fromdomain.com> To: To Person <to@todomain.com> 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に設定する必要があります。次に、境界内でテキストセクションと添付セクションを指定することができます。
境界は、電子メールのメッセージ部分に表示されない一意の番号が続く2つのハイフンで開始されます。電子メールの最後のセクションを示す最後の境界線も2つのハイフンで終わらなければなりません。
添付ファイルは、送信前にbase64エンコーディングを持つpack( “m”)関数でエンコードする必要があります。
例
次の例は、ファイル/tmp/test.txtを添付ファイルとして送信する例です。一度試してみてください –
#!/usr/bin/python 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 = 'webmaster@tutorialpoint.com' reciever = 'amrood.admin@gmail.com' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From Person <me@fromdomain.net> To: To Person <amrood.admin@gmail.com> 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"