python发邮件要装什么
在介绍Python发送电子邮件的具体操作之前,我认为有必要介绍SMTP,这更有助于理解Python发送电子邮件的实现原理。SMTP协议属于TCP/IP协议集,即简单的邮件传输协议。它是一组从源地址到目的地址传输电子邮件的规则。它控制了信件的传输模式。Python还在此基础上包装了电子邮件。
1.python发邮件所需的基本包
python发送邮件需要python自带的两个模块,smtplib和email。无需下载即可直接导入import。
python的smtplib提供了一种非常方便的发送电子邮件的方式,它简单地包装了smtp协议。
2.smtplib的用法
smtplib的用法相对简单,分为两个步骤。
创建SMTP并连接SMTP目标服务器的操作对象可以是163、QQ等。
目标服务器(自己的邮箱地址和邮箱授权码)根据自己的账号登录。
调用对象中的方法,将电子邮件发送到目标地址。
python与smtp服务器具体交互的通用代码:
importsmtplib server=smtplib.SMTP(mailserver,port)#发件人邮箱中的SMTP服务器端口为25 server.login(sender,passwd)#发件人的邮箱账号、邮箱授权码 #msg.as_string()中as_string()将msg(MIMEText或MIMEMultipart对象)变成str。 server.sendmail(sender,receive,msg.as_string()) server.quit()
连接目标服务器的具体python代码如下:注:本文使用qqsmtp服务器。
相关推荐:Python基础教程
smtp服务器常用邮箱地址:
新浪邮箱:smtp.sina.com,搜狐邮箱:smtp.sohu.com,qq邮箱:smtp.qq.com
sender_maile='80617252@qq.com'#发送方的邮箱地址 sender_pass='lsjdfsljdfk'#邮箱提供的授权码,可以在第三方登录,我这是随便打的。 sftp_obj=smtplib.SMTP('smtp.qq.com',25) sftp_obj.login(sender_mail,sender_pass) #三个参数是:发件人邮箱账号、收件人邮箱账号、发送的邮件体 sftp_obj.sendmail(sender_mail,receiver_mail,msg_root.as_string()) sftp_obj.quit()
3.详细理解和使用email模块
email模块下的mime模块下有三个常用的模块,三个模块中有三大类。其实就是下面三个,说的很绕,下面是导入模式,一目了然。
fromemail.mime.textimportMIMEText fromemail.mime.imageimportMIMEImage fromemail.mime.multipartimportMIMEMultipart
简单来说说他们的关系。如果构建MIMEText对象,就意味着文本邮件对象。如果构建MIMEMage对象,就意味着作为附件的图片对象。如果你想组合多个对象,你应该使用MIMEMultipart对象,它代表整个电子邮件。这个说法不应该很清楚。下面分开总结,最后总结一下完整的代码(可以发送所有内容的代码)。
A.MIMEText对象中有三个参数需要我们设置,一个是文本内容,另一个是文本内容的类型,例如:text/plain”和”text/html一个是文本内容的编码。
构建普通文本:
text_info='helloworld' text_sub=MIMEText(text_info,'plain','utf-8')
结构超文本:
url="https://blog.csdn.net/chinesepython" html_info=""" <p>点击以下链接,你将去一个更大的世界</p> <p><ahref="%s">clickme</a></p> <p>iamveryglassesforyou</p> """%url html_sub=MIMEText(html_info,'html','utf-8') #若不添加下面的行代码,上面的文本将不会正常显示,超文本的内容将作为文本显示 html_sub["Content-Disposition"]='attachment;filename="csdn.html"'
构建base64数据流,用于发送文件时,构建附件代码:
txt_file=open(r'D:\python_files\files\hello_world.txt','rb').read() txt=MIMEText(txt_file,'base64','utf-8') txt["Content-Type"]='application/octet-stream' #命名发送的附件 txt.add_header('Content-Disposition','attachment',filename='hello_world.txt')
B.只需将读取的文件传输到MIMEIMage对象中即可。
构造图片:
image_file=open(r'D:\python_files\images\test.png','rb').read() image=MIMEImage(image_file) image.add_header('Content-ID','<image1>') #命名发送的图片 image["Content-Disposition"]='attachment;filename="red_people.png"'
C.MIMEMultipart对象创建了三种类型,该模块主要通过attach将上述构建的内容传输到电子邮件的整体内容中。
“邮件类型为”multipart/alternative“邮件文本包括纯文本文本(text/plain)和超文本正文(text/html)。
“邮件类型为”multipart/related邮件文本包括图片、声音和其他嵌入资源。
“邮件类型为”multipart/mixed“邮件包括附件、图片、文本等。可以添加,所以如果发送的内容很多,通常会使用这个。选择mixed类型,可以发送任何内容。