【Python】 发邮件用 smtplib & email
2017-03-11 18:11
405 查看
smtplib & email
■ 概述
发邮件主要用到smtplib以及email模块。stmplib用于邮箱和服务器间的连接,发送的步骤。email模块主要用于处理编码,邮件内容等等。主要是参考了那个发报表的脚本,简单记录了下最简单的用法,没啥参考价值= =
■ smtplib基本用法
*在sendmail中,sender只是名义上的发送人,只是上っ面的な东西。当sender和user不一致的时候,邮件里就会显示邮件有sender转发。
*sender要老老实实写xxxx@xx.xx的格式。receiver可以有多个,以一个列表形式传入参数即可。content这里若不是MIME对象而是单纯的字符串的话不会报错,但是服务器也不会发邮件的。
*receiver是收件邮箱(当多个收件人时应该是各个收件地址组成的列表)
*content就是email模块做文章的地方了
■ email模块基本用法
email模块主要用到了email.mime.text.MIMEText , email.mime.multipart.MIMEMultipart , email.mime.image.MIMEImage等 *一些python版本中也有from email import MIMEText,中间没有mime
对于文本类型的文件:
额外提一下,msg['From']这里的话建议写成"Some_Alias<realaddress@domain.com>"这样的形式,这样的话大多邮件服务器都可以把alias(发送人的别名)和真的发送地址给分别解析出来。
msg['To']中将多个收件人通过英文逗号分开可以在邮件中正确显示多个收件人。但是实际是发送给几个收件人并不是这里决定,而是sendmail方法的receiver参数决定,那个参数需要是个列表。也就是msg['To'].split(',')
最后,在sendmail中参数要的是string或者buffer,所以最后传给它的参数不是msg本身而是msg.as_string()
*如果要发html的话就把MIMEText的参数plain换成html就好了
如果要添加附件,那么就要把上面的msg创建为MIMEMultipart(),然后用msg.attach(...)方法来附上包括附件在内的各个元素,包括文本,附件文件,图片等
attach的参数是attachment,其创建方法如下:
同时也别忘了设置msg[那几个属性]以及最后要msg.as_string()用于发出邮件
需要注意,add_header中的几个参数尽量保证是str类型的,包括带有中文的文件名,可能的话尽量转化成utf-8格式的字符串,否则发出的邮件附件名可能不符合预期
■ 概述
发邮件主要用到smtplib以及email模块。stmplib用于邮箱和服务器间的连接,发送的步骤。email模块主要用于处理编码,邮件内容等等。主要是参考了那个发报表的脚本,简单记录了下最简单的用法,没啥参考价值= =
■ smtplib基本用法
smtp = smtplib.SMTP() #建立smtp对象 smtp.connect('server',port) #建立与smtp服务器的连接 smtp.login('user','password') smtp.sendmail('sender','receiver','content') smtp.quit()
*在sendmail中,sender只是名义上的发送人,只是上っ面的な东西。当sender和user不一致的时候,邮件里就会显示邮件有sender转发。
*sender要老老实实写xxxx@xx.xx的格式。receiver可以有多个,以一个列表形式传入参数即可。content这里若不是MIME对象而是单纯的字符串的话不会报错,但是服务器也不会发邮件的。
*receiver是收件邮箱(当多个收件人时应该是各个收件地址组成的列表)
*content就是email模块做文章的地方了
■ email模块基本用法
email模块主要用到了email.mime.text.MIMEText , email.mime.multipart.MIMEMultipart , email.mime.image.MIMEImage等 *一些python版本中也有from email import MIMEText,中间没有mime
对于文本类型的文件:
msg = MIMEText('some content','plain','编码') msg['Subject'] = '...' msg['From'] = '...' #这里可以瞎填,可以认为是内容的一部分,不影响发送操作本身,但是有一些邮件服务提供商可能会因为识别垃圾邮件等策略上的原因而不发送没通过验证的From项。 msg['To'] = '...' #接收方有多个是可用逗号分隔开
额外提一下,msg['From']这里的话建议写成"Some_Alias<realaddress@domain.com>"这样的形式,这样的话大多邮件服务器都可以把alias(发送人的别名)和真的发送地址给分别解析出来。
msg['To']中将多个收件人通过英文逗号分开可以在邮件中正确显示多个收件人。但是实际是发送给几个收件人并不是这里决定,而是sendmail方法的receiver参数决定,那个参数需要是个列表。也就是msg['To'].split(',')
最后,在sendmail中参数要的是string或者buffer,所以最后传给它的参数不是msg本身而是msg.as_string()
*如果要发html的话就把MIMEText的参数plain换成html就好了
如果要添加附件,那么就要把上面的msg创建为MIMEMultipart(),然后用msg.attach(...)方法来附上包括附件在内的各个元素,包括文本,附件文件,图片等
attach的参数是attachment,其创建方法如下:
attachment = MIMEText(open("附件文件","rb").read(),'base64','utf-8') attachment.add_header('Content-Disposition','attachment',filename='...') #这一步不能少,否则看邮件大小附件被包括进去了但是附件显示不出来。Content-Disposition和attachment两个暂时そのまま不要动。。 msg.attach(attachment) msg.attach(MIMEText('...','plain','utf-8')) #添加邮件的文本部分
同时也别忘了设置msg[那几个属性]以及最后要msg.as_string()用于发出邮件
需要注意,add_header中的几个参数尽量保证是str类型的,包括带有中文的文件名,可能的话尽量转化成utf-8格式的字符串,否则发出的邮件附件名可能不符合预期
相关文章推荐
- python3 发邮件 smtplib & email 库
- linux python (smtplib + email)自动化发邮件脚本
- python 用模块email,smtplib发邮件
- python的smtplib发送email给多人要传列表而不是','.join(LIST)
- Python 标准库 —— 邮件(email)与邮件服务器(smtplib)
- python发邮件smtplib+mail
- 用smtplib和email封装python发送邮件模块类分享
- 使用python的email、smtplib、poplib模块收发邮件
- 用smtplib和email封装python发送邮件模块类分享
- python的邮件模块smtplib&email
- python之smtplib发邮件
- python 使用smtplib发送带附件的email
- 使用python的email、smtplib、poplib模块收发邮件
- [Python]使用smtplib类库发邮件
- python email ==> send 发送邮件 :) [smtplib, email 模块]
- python smtplib 模块发送邮件
- Python模块探秘之smtplib,实现纯文本邮件的发送
- python smtplib模块(实现调用第三方smtp服务器发送邮件)
- 【python】pandas & matplotlib 数据处理 绘制曲面图
- 2011-11-24 13:51 [错误]File "/usr/lib/python2.7/subprocess.py"