Python被宣传为“包含电池”语言。 所以,我想知道为什么它的标准库不包括对电子邮件的高级支持:
我发现你需要了解很多关于MIME的信息,才能创建一个与典型电子邮件客户端相同的电子邮件,例如处理HTML内容,嵌入图像和文件附件。
要实现这一点,您需要执行low level assembly of the message,例如:
MIMEMultipart
部分,了解related
,alternate
等。base64
如果您只是学习了足够的MIME来收集这样的电子邮件,那么很容易陷入陷阱,例如错误的部分嵌套,以及创建某些电子邮件客户端可能无法正确查看的邮件。
我不需要知道MIME才能正确发送电子邮件。 高级库支持encapsulate all this MIME logic,允许你写这样的东西:
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')])
有没有理由不在“包含电池”的标准库中?
答案 0 :(得分:2)
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()
答案 1 :(得分:2)
我认为问题更多的是关于电子邮件消息结构的复杂性,而不是Python中的smpt lib的弱点。
This example in PHP似乎并不比Python示例简单。