在咱们平常项目中,会常常使用到邮件的发送功能,如何利用Python发送邮件也是一项必备的技能。本文主要讲述利用Python来发送邮件的一些基本操做。html
本章主要包含知识点:python
咱们通常发送邮件时,用到的代理有outlook,qq邮箱等,无论用什么代理,你都须要登陆你的邮箱,而这个邮箱就是在各大邮箱服务器上开辟的一部分空间,用来接收、发送和存储你的邮件信息。服务器
说到邮件发送,不得不了解一下SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。邮件发送原理简单讲就是代理经过SMTP协议将信息发送到邮箱服务器上,邮箱服务器再经过POP3协议转发到收件人的邮件服务器中,以下图:app
所以使用Python发送邮件时,能够将Python的解释器当作一个代理,须要首先链接到邮箱服务器,将邮件发过去,那么因为不一样公司的邮箱服务器地址不尽相同,这里列出了一些经常使用的地址以下:测试
既然已经知道邮件发送原理,接下来就是用Python链接smtp服务器,不就可发送邮件了。其实强大的python早就封装好了一个package:email, 利用其中的几个类便可实现,具体代码以下: ui
1 from email.mime.text import MIMEText 2 from email.header import Header 3 from email.mime.multipart import MIMEMultipart 4 import smtplib 5
6
7 class Email(object): 8
9 def __init__(self): 10 self.smtp = ''
11 self.username = ''
12 self.password = ''
13
14 self.subject = ''
15 self.sender = ''
16 self.receiver = [] 17 self.cc = [] 18
19
20 def message_init(self, html): 21 message = MIMEMultipart() 22 message['subject'] = Header(self.subject, 'utf-8') 23 message['From'] = self.sender 24 message['To'] = ', '.join(self.receiver) 25 message['Cc'] = ', '.join(self.cc) 26
27 # 解决乱码, html是html格式的str
28 message_context = MIMEText(html, _subtype='html', _charset='utf-8') 29
30 # 邮件正文内容
31 message.attach(message_context) 32
33 return message
Email自定义类中属性包含了邮箱服务器的地址,邮箱登陆的用户名和密码,邮件主题,发件人,收件人和抄送人。这里注意了,收件人和抄送人是个list,添加的时候使用append()编码
message_init(self, html)即将发送内容进行初始化,包括邮件发送和收件人的初始化。其中 MIMEText(html, _subtype='html', _charset='utf-8') 中,参数一为发送的邮件内容,为字符串;参数二表示设置文本格式为html(邮件都是使用html格式发送的);参数三表示设置编码格式为utf-8。如上这样一个邮件信息包就构造好了,万事俱备只欠东风,发送邮件的核心代码以下:spa
1 def send_email(self, html): 2 message = self.message_init(html) 3 smtp_obj = smtplib.SMTP(self.smtp) 4 smtp_obj.login(self.username, self.password) 5 smtp_obj.sendmail(self.sender, self.receiver + self.cc, message.as_string()) 6 smtp_obj.quit()
模拟正常客户端邮件发送,遵循登陆->发送->退出原则, 这里注意sendmail的第二个参数为 收件人和抄送人的合集。代理
下面来测试一下这个代码是否可行,发送一段简单的文字: code
1 if __name__ == '__main__': 2 print('start……') 3 sende = Email() 4 strs = "This is a test email / 这是一封测试邮件"
5
6 sende.smtp = 'smtp.163.com'
7 sende.username = 'wjian.coming@163.com'
8 sende.password = 'xxxxxx'
9
10 sende.subject = 'Test/测试邮件'
11 sende.sender = 'wjian.coming@163.com'
12 sende.receiver.append('948001879@qq.com') 13 sende.cc.append('948001879@qq.com') 14
15 sende.send_email(strs) 16
17 print('end')
如上,测试了发送中文和英文两种语言,发送了测试的简单字符串,实测结果可行,截图以下
那么如何发送html格式文件呢?其实想一想也很简单,将html文件所有读取出来以后,转为str便可,如何转换,能够参考我以前写的文章,读取文件生成str,参考连接:http://www.javashuo.com/article/p-sadvbupl-ne.html 使用 readFile 方法便可,而后复用上述的方法。具体的代码就不在这里体现了,有兴趣的同窗能够结合实现一下呢。
那么,利用Python如何发送邮件已经都了解了吧,那么这时就会引起更深的问题:如何添加附件?如何发送图片呢? Good question! 关注我,下期为你解答。
(但愿个人文章可以助你一臂之力,成就更辉煌的你,关注我,咱们一块儿进步)