> ⑥Python電子メールを送信 – ネットワークエンジニアチュートリアル

⑥Python電子メールを送信

スポンサーリンク

無料でプログラマへ!30歳までなら無料でプログラミング学校に通うことが出来ます。下の画像をクリックして無料相談会でGO!

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"

ここでは、トリプルクォートを使用してヘッダーを正しくフォーマットするよう注意しながら、基本的な電子メールをメッセージに入れました。電子メールには、FromTo、および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"

前のページ⑤Pythonネットワークプログラミング

次のページ⑦Pythonスレッドマルチプログラミング

スポンサーリンク

ネットワークエンジニアになりたければ下記から無料相談会に参加!
なんと無料で授業を受けれてエンジニアになれます

投稿日:

執筆者: