Python实现自动发送邮件功能

Python实现自动发送邮件功能,第1张

概述简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件 @H_404_0@简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。

@H_404_0@SMTP通讯的基本流程可以概括为以下几点:

@H_404_0@1.连接SMTP服务器

@H_404_0@2.登陆用户名和密码

@H_404_0@3.发送指定邮件内容

@H_404_0@4.退出SMTP连接

@H_404_0@一、发送纯文本格式邮件

#Coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')import smtplibfrom smtplib import SMTPfrom email.mime.text import MIMETextfrom email.header import header#构造纯文本邮件内容msg = MIMEText('hello,send by Python.....','plain','utf-8')#发送者邮箱sender = 'xxxxx@XXXXX.com.cn'#发送者的登陆用户名和密码user = 'xxxxx@XXXX.com.cn'password = 'xxxxxx'#发送者邮箱的SMTP服务器地址smtpserver = 'xxxx'#接收者的邮箱地址receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个Listsmtp = smtplib.SMTP() #实例化SMTP对象smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定smtp.login(user,password) #登陆smtp服务器smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数'''login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个List,邮件正文是一个str,as_string()把MIMEText对象变成str。'''smtp.quit()
@H_404_0@运行之后就会收到邮件:

@H_404_0@但是仔细观察会发现:

@H_404_0@1.邮件没有主题

@H_404_0@2.看不到收件人的信息

@H_404_0@这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:

msg = MIMEText('hello,'utf-8')msg['From'] = header('Python测试','utf-8')msg['To'] = header('管理员','utf-8')subject = 'python SMTP 测试邮件'msg['Subject'] = header(subject,'utf-8') 
@H_404_0@二、发送HTML格式的邮件

@H_404_0@如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为HTML就可以了:

msg = MIMEText('<HTML><h1>你好!<h1><HTML>','HTML','utf-8') #发送HTML格式邮件就只需要把对应的第二个参数改为HTML即可 
@H_404_0@三、发送带附件的邮件

@H_404_0@发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

#Coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import header#发送邮件服务器smtpserver = 'xxxxx'#发送邮箱用户名和密码user = 'xxxxxx'password = 'xxxxxx'#发送邮箱sender = 'xxxxx'#接受邮箱receiver = 'xxxxxxx'#创建一个带附件的实例message = MIMEMultipart()message['From'] = header('Python 测试','utf-8')message['To'] = header('测试','utf-8')subject = 'Python SMTP邮件测试'message['Subject'] = header(subject,'utf-8')#邮件正文内容message.attach(MIMEText('这是测试Python发送附件功能....','utf-8'))#构造附件1,传送当前目录下的test.txt文件att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8')att1['Content-Type'] = 'application/octet-stream'#这里的filename可以任意写,写什么名字 邮件中就显示什么名字att1['Content-disposition'] = 'attachment;filename:"123.txt"'message.attach(att1)smtp = smtplib.SMTP()smtp.connect(smtpserver,25)smtp.login(user,password)smtp.sendmail(sender,message.as_string())smtp.quit()
@H_404_0@小结

@H_404_0@使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。

@H_404_0@构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

@H_404_0@Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

@H_404_0@这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。

@H_404_0@以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Python实现自动发送邮件功能全部内容,希望文章能够帮你解决Python实现自动发送邮件功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1201032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存