0

Python は「バッテリー内蔵」言語として宣伝されています。では、標準ライブラリに電子メールの高レベルのサポートが含まれていないのはなぜだろうか。

HTML コンテンツ、埋め込み画像、添付ファイルの処理など、一般的な電子メール クライアントで実現できることと同等の電子メール メッセージを作成するには、MIME について多くの知識が必要であることがわかりました。

これを実現するには、次のようなメッセージの低レベルのアセンブリを行う必要があります。

  • セクションを処理し、、 などMIMEMultipartについて知っています。relatedalternate
  • 次のようなファイルエンコーディングについて知っているbase64

このような電子メールを組み立てるのに十分なだけ MIME について学習している場合、不適切なセクションのネスティングなどの罠に陥り、一部の電子メール クライアントで正しく表示されない可能性のあるメッセージを作成するのは簡単です。

電子メールを正しく送信するために、MIME について知る必要はありません。高レベルのライブラリ サポートは、この MIME ロジックをすべてカプセル化する必要があり、次のような記述が可能になります。

m = Email("mailserver.mydomain.com")
m.setFrom("Test User <test@mydomain.com>")
m.addRecipient("you@yourdomain.com")
m.setSubject("Hello there!")
m.setHtmlBody("The following should be <b>bold</b>")
m.addAttachment("/home/user/image.png")
m.send()

非標準ライブラリのソリューションはpyzmail次のとおりです。

import pyzmail
sender=(u'Me', 'me@foo.com')
recipients=[(u'Him', 'him@bar.com'), 'just@me.com']
subject=u'the subject'
text_content=u'Bonjour aux Fran\xe7ais'
prefered_encoding='iso-8859-1'
text_encoding='iso-8859-1'
pyzmail.compose_mail(
        sender,  recipients, 
        subject, prefered_encoding,  (text_content, text_encoding), 
        html=None, 
        attachments=[('attached content', 'text', 'plain', 'text.txt',
                      'us-ascii')])

これが「バッテリーを含む」標準ライブラリにない理由はありますか?

4

2 に答える 2

2

問題は、Python の smpt lib の弱点というよりも、電子メール メッセージの構造の複雑さに関するものだと思います。

PHP でのこの例は、Python の例よりも単純ではないようです。

于 2013-01-30T09:06:01.157 に答える
1
import smtplib
smtp = smtplib.SMTP()
smtp.connect()
smtp.sendmail("me@somewhere.com", ["you@elsewhere.com"],
    """Subject: This is a message sent with very little configuration.

    It will assume that the mailserver is on localhost on the default port
    (25) and also assume a message type of text/plain.

    Of course, if you want more complex message types and/or server
    configuration, it kind of stands to reason that you'd need to do
    more complex message assembly. Email (especially with embedded content)
    is actually a rather complex area with many possible options.
    """
smtp.quit()
于 2013-01-30T08:50:29.243 に答える