这里有新鲜出炉的 Python 教程,程序狗速度看过来!
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
这篇文章主要介绍了 Python 实现 SMTP 发送邮件详细教程,附 SMTP 邮件发送代码,感兴趣的小伙伴们可以参考一下
简介
Python 发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的环境调试导致,所以今天特出一个详细的教程,一步一步从环境调试到代码实现整一个教程,希望对还在苦苦寻找解决方法却迟迟不能得到有效解决的人员一点帮助。
SMTP 协议
首先了解 SMTP(简单邮件传输协议),邮件传送代理程序使用 SMTP 协议来发送电邮到接收者的邮件服务器。SMTP 协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用 SMTP 协议。SMTP 协议的默认 TCP 端口号是 25。
环境调试
上面说了是使用 SMTP 协议发送的邮件,所以需要先查看您的发件人邮箱是否有开启 SMTP 协议,如没有需要开启,我测试使用的是 163.com 的邮箱作为发信人邮箱,开启 SMTP 协议如下图所示。
1. 先登录到 163.com 邮箱中 (网易邮箱),如下图
2. 看到邮箱上面的功能栏中有一个 "设置" 的选项,单击该选项,然后选择下拉菜单的 "POP3/SMTP/IMAP"
3. 如下图所示,上面红框的两个必须勾选上,如没有勾选,要选择开启就可以勾选上了,然后可以看到下面红框里是:SMTP 服务器: smtp.163.com
实现代码
经过上面的设置后就将环境调试好了,下面就可以实现代码了,推荐使用 pycharm4.5.3 编辑器来编写代码,下面的代码在 python2.7 和 python3.4 版本测试都可使用。
- #coding:utf-8 #强制使用utf-8编码格式
- import smtplib #加载smtplib模块
- from email.mime.text import MIMEText
- from email.utils import formataddr
- my_sender='发件人邮箱账号' #发件人邮箱账号,为了后面易于维护,所以写成了变量
- my_user='收件人邮箱账号' #收件人邮箱账号,为了后面易于维护,所以写成了变量
- def mail():
- ret=True
- try:
- msg=MIMEText('填写邮件内容','plain','utf-8')
- msg['From']=formataddr(["发件人邮箱昵称",my_sender]) #括号里的对应发件人邮箱昵称、发件人邮箱账号
- msg['To']=formataddr(["收件人邮箱昵称",my_user]) #括号里的对应收件人邮箱昵称、收件人邮箱账号
- msg['Subject']="主题" #邮件的主题,也可以说是标题
- server=smtplib.SMTP("smtp.xxx.com",25) #发件人邮箱中的SMTP服务器,端口是25
- server.login(my_sender,"发件人邮箱密码") #括号中对应的是发件人邮箱账号、邮箱密码
- server.sendmail(my_sender,[my_user,],msg.as_string()) #括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
- server.quit() #这句是关闭连接的意思
- except Exception: #如果try中的语句没有执行,则会执行下面的ret=False
- ret=False
- return ret
- ret=mail()
- if ret:
- print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件
- else:
- print("filed") #如果发送失败则会返回filed
如果发送成功则会返回 ok,否则为执行不成功,如下图:
开拓视野
虽然代码可以用了,但是不免得有些人就爱瞎折腾,玩着玩着就把代码玩坏了,所以这里附上几个知识点以解你之疑惑。
1. 看到上面代码第一行的 "#coding:utf-8" 没有,相信很多看这代码的人都不怎么注意这一行,反正这和代码实现又没啥关系,保存时选择 utf-8 格式就行了嘛;告诉你们哦这一行代码在 python 中非常重要,最好写每一页都要加上强制字符编码,因为 python2 版本它默认识别 ASCII 编码,所以当中文字符出现在 python 中它是不认的,出现的错误提示如下图所示:
错误提示示例:File"F:/python/s12/pymail.py",line2
SyntaxError:Non-ASCIIcharacter'\xe5'infileF:/python/s12/pymail.pyonline2,butnoencodingdeclared;seehttp://www.python.org/peps/pep-0263.htmlfordetails
所以当出现上面的编码错误提示时,可以在页面的第一行加上
#coding:utf-8 #强制编码为 utf-8
或
#coding:GBK #强制编码为 GBK
来源: http://www.phperz.com/article/17/0412/291061.html