Python 发邮件用 smtplib & email
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 发邮件用 smtplib & email相关的知识,希望对你有一定的参考价值。
■ smtplib & email
■ 概述
发邮件主要用到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要老老实实写[email protected]的格式。receiver可以有多个,以一个列表形式传入参数即可。content这里若不是MIME对象而是单纯的字符串的话不会报错,但是服务器也不会发邮件的。
*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‘] = ‘...‘ #接收方有多个是可用逗号分隔开
最后,在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()用于发出邮件
以上是关于Python 发邮件用 smtplib & email的主要内容,如果未能解决你的问题,请参考以下文章
Python 使用 smtplib 发邮件,显示错误 [Errno 10060] A connection attempt failed because……