MIMEに関する事前の知識があまりないため、Pythonスクリプトを添付してメールを送信するスクリプトを作成する方法を学びました。相互参照した後Pythonドキュメント、Stack Overflowの質問、および一般的なWeb検索で、次のコードで解決しました [1] 動作するかテストしました。
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
fromaddr = "YOUR EMAIL"
toaddr = "EMAIL ADDRESS YOU SEND TO"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "SUBJECT OF THE EMAIL"
body = "TEXT YOU WANT TO SEND"
msg.attach(MIMEText(body, 'plain'))
filename = "NAME OF THE FILE WITH ITS EXTENSION"
attachment = open("PATH OF THE FILE", "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "YOUR PASSWORD")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
このスクリプトがどのように機能するかについて大まかな考えがあり、次のワークフローを作成しました。私のフローチャート(?)の精度を教えてください。
as.string()
|
+------------MIMEMultipart
| |---content-type
| +---header---+---content disposition
+----.attach()-----+----MIMEBase----|
| +---payload (to be encoded in Base64)
+----MIMEText
MIMEMultipart、MIMEText、およびMIMEBaseをいつ使用するかを知るにはどうすればよいですか?これは複雑な質問のように思えるので、おそらく私にいくつかの一般的な経験則を提供しますか?
[1] http://naelshiab.com/tutorial-send-email-python/
[2] http://blog.magiksys.net/generate-and-send-mail-with-python-tutorial
電子メールメッセージは、ヘッダー(「From」、「To」、「Subject」など)と本文( RFC 822、セクション3.1 を参照)で構成されます。
メッセージの本文は、デフォルトではプレーンASCII text。MIME( RFC 2045 として処理されます。 RFC 2046 、 RFC 2047 、 RFC 2048 、 RFC 2049 )は、さまざまな種類の電子メールコンテンツを指定できます。
MIMEで非常に便利なことの1つは、Content-Typeを指定することです(例:text/html
またはapplication/octet-stream
)。
もう1つの便利な点は、複数の部分を含むメッセージを作成できることです(たとえば、HTMLとHTML内に画像の両方が必要な場合)。これは、multipart
Content-Type( RFC 2046、section 5.1 )を指定することによって行われます。
メッセージにmultipart
Content-Typeがある場合、それは複数のメッセージで構成され、それぞれが独自のContent-Typeを定義することを意味します(これもマルチパートまたはその他の何かである可能性があります)。マルチパートメッセージはPython MIMEMultipart
クラスで表されます)にあります。
したがって、質問3に答えるには、MIMEMultipart
を使用すると、はい、ツリーのような構造になりますが、 MIMEText
が使用されている場合、ツリーではありません。
質問4は、ヘッダーを設定するクラス( "To"、 "From"など)を尋ねます-これは、 Message
クラスですが、すべてのMIME
クラスはMessage
から継承されるため、どのクラスでも実行できますが、これらのヘッダーは、マルチパートメッセージのルート部分。
つまり、メッセージが1つのMIME部分のみで構成されている場合は、その部分にヘッダーを指定します。複数の部分で構成されている場合、ルートはMIMEMultipart
です-その部分のヘッダーを指定します。
質問2は「MIMEMultipart、MIMEText、およびMIMEBaseをいつ使用するか」を尋ねます。 -MIMEBase
は単なる基本クラスです。 specification が言うように: "通常、特にMIMEBase
のインスタンスを作成することはありません"-MIMEText
はテキスト用です(例text/plain
またはtext/html
)、メッセージ全体がテキスト形式の場合、またはその一部の場合。 -MIMEMultipart
は、「複数のパーツがある」と言ってパーツを一覧表示するためのものです。添付ファイルがある場合は、次のことも行います。同じコンテンツの代替バージョンを提供する(例:プレーンテキストバージョンとHTMLバージョン)
質問5 "正確に"ペイロード "とは何ですか?"-それは単なる空想的な言葉ですメッセージの内容(またはメッセージ部分)
質問6SMTPで7ビットのみを使用することには制限があります。詳細については、 this answer を参照してください。
質問1は完全には理解できませんでしたが、グラフは多かれ少なかれ正しいようです。ところで、 MIMEBase
があるので、ここではMIMEApplication
を使用しません。これは、意図した目的により適しているようです。