Python の MIMEMultipart
プロンプトまたはリマインダーとして、またはその他の目的で電子メールを送信することは、私たちの生活の重要かつ定期的な部分になっています。 ソフトウェア開発者は、開発段階で、アプリケーションを介してエンド ユーザーに電子メールを受信してもらいたいという状況によく遭遇します。
この記事では、Python とその MIME (Multipurpose Internet Mail Extensions) モジュールを使用して、添付ファイル付きの電子メールを効率的に送信する方法について学習します。
Python の MIMEMultipart
、MIMEText
、および MIMEBase
モジュール
Python のsmtplib
と同様に、MIME モジュールは高度なツールを提供して、電子メールの送受信プロセスをより簡単に、より強化するのに役立ちます。
smtplib
モジュールを使用すると添付ファイルなしで電子メールを送信できますが、MIME
モジュールは添付ファイル付きの電子メールを送信する必要がある場合に使用されます。
MIME
の 3つのモジュールにはさまざまな独自の目的があり、それぞれが Python スクリプトを介して電子メールを送信するエクスペリエンスを向上させます。
-
MIMEマルチパート
このモジュールは、さまざまなコンテンツ タイプでメッセージを作成する場合に使用されます。 これは、
MIMEMultipart
が多くのコンテンツ タイプの使用をサポートしていることを意味します。たとえば、text/HTML および application/octet-stream です。 マルチパートの助けを借りて、HTML 内に HTML と画像の両方を含めることもできます。
-
MIMEテキスト
これは、テキストベースの電子メールを送信するために使用されます。 このモジュールを使用すると、完全なテキストベースの電子メールを簡単に作成して送信できます。
-
MIMEベース
MIMEBase
モジュールは、より具体的なサブクラスと ‘MIME 対応’ を持つことができるように、基本クラスとしてのみ使用されます。
Python で添付ファイル付きの電子メールを送信するためのサンプル スクリプト
添付ファイル付きの電子メールを送信するための Python スクリプトを作成するのは、添付ファイルなしの場合に比べてかなり複雑であると考える人もいるかもしれませんが、MIME モジュールを使用すると、プロセス全体がかなり簡単になります。
添付ファイル付きのメールを送信するには、次の手順に従う必要があります。
添付ファイルを追加するには、次の Python ライブラリをインポートする必要があります。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
これらのライブラリを使用すると、当面の作業がかなり簡単になります。 幸いなことに、これらはネイティブ ライブラリであり、適切に機能するため、添付ファイルを追加するために外部ライブラリをインポートする必要はありません。
-
まず、
MIMEMultipart
のインスタンスを作成することからスクリプトを開始します。これをmsg
と呼びます。 -
次に、送信者と受信者の電子メール アドレスを記述します。 また、作成したインスタンスの
From
、To
、およびSubject
キーに件名を記述します。 -
ここで、
body
という変数で送信したいメッセージの本文を構築し、この変数をattach()
メソッドを使用して前に作成したmsg
インスタンスにアタッチする必要があります。 -
ここで、添付したいファイルを開きます。 このファイルを
rb
モードで開きます。これに続いて、
maintype
とsubtype
の 2つのパラメータを持つMIMEBase
のインスタンスを作成します。 これらは、メッセージのすべての MIME 対応サブクラスの基本クラスを定義します。ここでの
maintype
は主にテキストまたは画像で構成されるコンテンツ タイプmajor
であり、subtype
はコンテンツ タイプminor
であり、通常はプレーン、gif、オーディオ、および/またはその他のメディアで構成されることに注意してください。 -
次に、
set_payload
を使用して、ペイロードをエンコードされた形式に変更します。 これを base 64 でエンコードし、このファイルを先ほど作成したマルチパート インスタンスmsg
に添付します。
これは、MIME モジュールの使用を視覚化して理解するのに役立つ Python スクリプトです。
コード例:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "EMAIL address of the sender"
toaddr = "EMAIL address of the receiver"
# instance of MIMEMultipart
msg = MIMEMultipart()
# storing the sender's email address
msg["From"] = fromaddr
# storing the receiver's email address
msg["To"] = toaddr
# storing the subject
msg["Subject"] = "Subject of the Mail"
# The string to store the body of the mail
body = "Body_of_the_mail"
# attach the body with the msg instance
msg.attach(MIMEText(body, "plain"))
# open the file to be sent
filename = "File_name_with_extension"
attachment = open("Path of the file", "rb")
# The instance of MIMEBase and named as p
p = MIMEBase("application", "octet-stream")
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header("Content-Disposition", "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP("smtp.gmail.com", 587)
# start TLS for security
s.starttls()
# Authentication
s.login(fromaddr, "Password_of_the_sender")
# Converts the Multipart msg into a string
text = msg.as_string()
# sending the mail
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()
これは、ある人に電子メールを送信するためのかなり簡単なスクリプトです。 このメールを複数の人に送信したい場合は、ループを使用してこれを実現できます。
ここで注意すべきもう 1つの重要な点は、メール アカウントで 2 段階認証が有効になっている場合、このスクリプトは機能しないということです。 これを機能させるには、2 段階認証を無効にする必要があります。
また、この方法で電子メールを送信すると、電子メールがユーザーの受信トレイに直接届き、スパム フォルダーに入れられることはありません。
この機能は悪用される可能性がありますが、緊急性が必要で、メールの不在による遅延が許されない企業にとって役立つことがわかっています。
Python とそのネイティブ MIME ライブラリを使用して、添付ファイル付きの単純な電子メールを送信する方法について知っておくべきことはすべて学びました。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn