Python之简单的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", line 2
SyntaxError: Non-ASCII character '\xe5' in file F:/python/s12/pymail.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
所以当出现上面的编码错误提示时,可以在页面的第一行加上
#coding:utf-8 #强制编码为utf-8
或
# coding: GBK #强制编码为GBK
Python之简单的SMTP发送邮件详细教程附代码的更多相关文章
- Python、 Pycharm、Django安装详细教程(图文)
前言 这篇文章主要介绍了Python. Pycharm.Django安装详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. ...
- PHP简单的长文章分页教程 附源码
PHP简单的长文章分页教程 附源码.本文将content.txt里的内容分割成3页,这样浏览起来用户体验很好. 根据分页参数ipage,获取对应文章内容 include('page.class.php ...
- python批量json文件转xml文件脚本(附代码)
场景:在使用了mask rcnn跑实验后标注了大量地json格式文件,现在打算使用yolo和faster rcnn 跑实验 所以需要将之前地json文件转为xml 但是找了很久,没发现有批量处 ...
- easyUI整合富文本编辑器KindEditor详细教程(附源码)
原因 在今年4月份的时候写过一篇关于easyui整合UEditor的文章Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合,从那 ...
- 【数据结构】10分钟教你用栈求解迷宫老鼠问题超详细教程附C++源代码
问题描述 给定一张迷宫地图和一个迷宫入口,然后进入迷宫探索找到一个出口.如下图所示: 该图是一个矩形区域,有一个入口和出口.迷宫内部包含不能穿越的墙壁或者障碍物.这些障碍物沿着行和列放置,与迷宫的边界 ...
- python类的实例方法\静态方法\类方法区别解析(附代码)
前言 搞了好久python,一直搞得不太清楚这几种类的方法,今天花时间好好测试一下,算是弄懂点皮毛吧. 三种方法的不同 先剽窃个图看一下 可以看到,实例是三种方法都可以调用的,而类只可以调用两种.所以 ...
- PHP判断手机号运营商(详细介绍附代码)
道理很简单,知道手机号规则 进行正则判断就可以 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.15 ...
- Python——开发一个自动化微信投票器【附代码实例方法】
一个研究Python实践,最近研究一个投票的东东,主要是想测试利用Python实现刷微信投票. 本文纯粹为了记录一下 webdriver直接操作页面按钮的方法: #!/usr/bin/python # ...
- python爬虫学习心得:中国大学排名(附代码)
今天下午花时间学习了python爬虫的中国大学排名实例,颇有心得,于是在博客园与各位分享 首先直接搬代码: import requests from bs4 import BeautifulSoup ...
随机推荐
- table 的thead th 固定 tbody滚动例子
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- tar打包和解压命令
如果你有一个大文件 想下载下来 但是又太大 可以压缩一下 然后打包 #压缩 tar -czvf ***.tar.gz tar -cjvf ***.tar.bz2 #解压缩 tar -xzvf ***. ...
- struts2 表单处理
在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...
- [C#] 常用工具类——文件操作类
/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...
- BA - 读书雷达10本必读书
https://www.douban.com/doulist/43172796/ 用户故事与敏捷方法 入门篇之一: “是每个ThoughtWorks BA都读的经典入门书籍,详细介绍了用户故事及实用操 ...
- mysql in 的两种使用方法
简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ...
- Android API 文档 离线秒开方法
http://blog.csdn.net/haifengzhilian/article/details/39898627 也是最近才看Android开发,但是,它的API文档无论是在线还是离线的,实在 ...
- 深入理解Fsync----JBD内核调试 专业打杂程序员 @github yy哥
http://hustcat.github.io/ http://www.cnblogs.com/hustcat/p/3283955.html http://blog.sina.com.cn/s/ar ...
- cellspacing cellpadding
<table border="1" cellspacing="300" cellpadding="100"> <tr ...
- expect批量分发公钥
sshkey.exp #!/usr/bin/expect# 由于是多台服务器,需要在shell脚本中循环调用该脚本 if { $argc != 2 } { send_user "usage: ...