Ken*_*Lin 18 python email mime smtp smtplib
在没有很多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()
Run Code Online (Sandbox Code Playgroud)
我对此脚本现在的工作方式有了大致的了解,并制定了以下工作流程.请告诉我我的流程图(?)的准确程度.
as.string()
|
+------------MIMEMultipart
| |---content-type
| +---header---+---content disposition
+----.attach()-----+----MIMEBase----|
| +---payload (to be encoded in Base64)
+----MIMEText
Run Code Online (Sandbox Code Playgroud)我怎么知道何时使用MIMEMultipart,MIMEText和MIMEBase?这似乎是一个复杂的问题,所以也许只是给我一些一般的经验法则?
[1] http://naelshiab.com/tutorial-send-email-python/
[2] http://blog.magiksys.net/generate-and-send-mail-with-python-tutorial
zvo*_*one 10
电子邮件由标题(例如,“发件人”,“收件人”,“主题”等)和正文(请参阅RFC 822,第3.1节)组成。
邮件的正文默认情况下被视为纯ASCII文本。MIME(RFC 2045,RFC 2046,RFC 2047,RFC 2048和RFC 2049)定义了扩展名,这些扩展名允许指定不同类型的电子邮件内容。
您可以使用MIME进行的一项非常有用的操作是指定Content-Type(例如text/html
或application/octet-stream
)。
另一个有用的事情是,您可以创建包含多个部分的消息(例如,如果要在HTML中同时包含HTML和图像)。通过指定multipart
Content-Type(RFC 2046,第5.1节)来完成此操作。
如果一条消息具有multipart
Content-Type,则意味着它由多条消息组成,并且每条消息都定义了自己的Content-Type(可以再次为多部分或其他内容)。多部分消息以MIMEMultipart
类表示在Python中。
因此,回答问题3:MIMEMultipart
使用时,是的,它是树状结构,但如果仅MIMEText
使用它,则不是树。
问题4询问在哪个类上设置标头(“ To”,“ From”等)-完成Message
该类的操作,但是所有MIME
类都继承自Message
,因此可以在任何一个标头上进行设置,但是这些标头只能理解多部分消息的根源。
换句话说,如果邮件仅由一个MIME部分组成,请在该部分上指定标头。如果它由多个部分组成,则根为MIMEMultipart
-指定该部分的标题。
问题2询问“何时使用MIMEMultipart,MIMEText和MIMEBase”。- MIMEBase
只是基础类。作为规范说:“通常你会不会创建具体的实例MIMEBase
”
- MIMEText
是文本(例如text/plain
或text/html
),如果整个邮件是文本格式,或者如果它的一部分。- MIMEMultipart
表示“我有多个部分”,然后列出这些部分-如果您有附件,也可以这样做,以提供相同内容的替代版本(例如纯文本版本和HTML版本)
问题5 :“有效载荷到底是什么?” -这只是消息(或消息部分)内容的花哨词
问题6在SMTP中仅使用7位是有限制的。有关更多详细信息,请参见此答案。
我没有完全理解问题1,但该图表或多或少是正确的。顺便说一句,我不会MIMEBase
在这里使用,因为MIMEApplication
似乎更适合预期的目的。
归档时间: |
|
查看次数: |
14407 次 |
最近记录: |