【PYTHON3】SMTP发送邮件
学一门脚本语言,只是为了扩展自己的路子和尝试更便捷的解决问题渠道,非是谋生,说是兴趣也未尝不可,让我为码狂舞这一生,all my life!
第一篇PYTHON3的博客,还是蛮激动的,写的不好的地方请留评论,虚心接受大家意见。
设计
工欲善其事,必先利其器,学python也需要一丁点的前期准备:找到一个好老师,我选择廖雪峰的python教程,写的很生动详细;安装适合版本的python,喜欢前卫的同学直接最新的python即可,不爱折腾的请选择python2.x版本;编程工具前期倒是不用在意,搞上pycharm只会定义变量也发挥不出来威力呀(貌似说的是本人,一开始学就搞了pycharm和webstorm)。
代码基于python3.4.1版本,盛宴开始:源码招呼各位客官嘞。
2 from email.mime.text import MIMEText
3 msg2 = MIMEText('hello, send first email', 'plain', 'utf-8')
4 from_addr = input('From: ')
5 password = input('Password: ')
6 smtp_server = input('SMTP server: ')
7 to_addr = input('To: ')
8 server = smtplib.SMTP(smtp_server, 25)
9 server.set_debuglevel(1)
10 server.connect(smtp_server, 25)
11 server.helo()
12 server.ehlo()
13 server.login(from_addr, password)
14 server.sendmail(from_addr, [to_addr], msg2.as_string())
15 server.quit()
实现详解
发送协议为smtp,依赖的两个库为smtplib和email
MIMEText用于创建 文本类型邮件,参数分别是:正文、子类型、编码格式。第二参数可能比较疑惑,子类型是什么?默认填充plain即可,第三参数依照官方手册解释只有‘ascii’和‘utf-8’两种格式,想不明白,字符集不应该有很多种吗?GB2312/en_us.UTF8/en_ZH.UTF8以及UNICODE等众多格式。
连接smtp的对端需要填写:用户名、 密码、smtpserver名称(qq的smtp为smtp.qq.com)、接收人的邮件地址,从输入获取。
smtp发送的过程:初始化smtp对象、connect、helo、ehlo(helo和ehlo是smtp协议中可选内容,在登录前提供校验,qq要求发送该消息 )、login、sendmail、quit。基本原理就是建立连接后校验身份,通过后登陆并发送邮件,发送完quit。
脚本实现及功能都很简单,提供大家python3.x版本的邮件发送参考,我不能厚颜无耻的继续骗字数了。