python模块smtplib实现纯文本邮件发送功能


Posted in Python onMay 22, 2018

今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了。下面来谈一谈我的这段经历。

配置你的邮箱

为什么要配置邮箱呢?具体要配置什么呢?

因为我们申请的一些免费邮箱都是默认不开启smtp/pop协议的。
SMTP是发邮件使用到的计算机网络中应用层协议中的一个;而POP则是收邮件时使用到的计算机网络中的应用层协议的其中一个。这都是理论性的知识了,上过计算机网络这门课的想必都知道,就不多说了。

配置就是要开启这项服务。否则我们就不能实现用Python代码来控制发送和接收邮件了。

我们在配置完成之后,系统会提示给我们一个邮箱客户端的授权码。作用就是我们登陆的时候替代原来的登陆密码。大家一定要完善保存咯。我这里采用的是163的邮箱,所以是可以自己设置这个授权码的。

使用代码发邮件

还是按照,先看代码再研究的策略。如下:

# coding:utf-8

import smtplib
from email.mime.text import MIMEText
from email.header import Header

"""
请确保自己的邮箱的smtp协议开启,都则会出现认证的错误的,如ssh等
"""


sender = "1564086XXXX@163.com"
# 收件人,可以是多个
receivers = ['102170XXXX@qq.com']

# 三个参数:第一个为纯文本,第二个plain设置文本格式,第三个为编码格式
message = MIMEText('这里是发送的邮件的主要的内容。Pure Text Here!','plain','utf-8')
message['From'] = Header('来自Mark','utf-8')
message['To'] = Header('测试标题','utf-8')

subject = '哈哈哈哈哈哈,这是邮件的主题 '
message['Subject'] = Header(subject,'utf-8')

try:
 smtpObj = smtplib.SMTP()
 smtpObj.connect('smtp.163.com',25)
 smtpObj.login(sender,'你的客户端授权码')
 smtpObj.sendmail(sender,receivers,message.as_string())
 smtpObj.quit()
 print '邮件已成功发送了'
except smtplib.SMTPException,e:
 print e.message

测试的结果:

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/mail/PureText.py
邮件已成功发送了

Process finished with exit code 0

python模块smtplib实现纯文本邮件发送功能

确实是成功发送了的。

代码探查

下面就来深入的研究一下发送邮件实现的流程吧。我们注意到了,最最主要的是下面的这样一段代码。

smtpObj = smtplib.SMTP()
smtpObj.connect('smtp.163.com',25)
smtpObj.login(sender,'你的客户端授权码')
smtpObj.sendmail(sender,receivers,\
message.as_string()
smtpObj.quit()

不难看出,主要是经历了下面的这些流程:

  • 获得SMTP服务
  • 连接服务器
  • 模拟客户端登陆
  • 实现发送邮件
  • 退出登录

其中核心的也就是客户端登陆和发送邮件的两个步骤。模拟登陆的时候需要注意的就是使用你自己的授权码就行了,没什么难度。而发送邮件的时候需要注意一下参数。发件人是一个,而收件人是一个列表,里面可以有很多个收件人(这样可以借助这个列表实现邮件的群发)。

其他需要注意的也就是使用MIME类型的数据,和使用utf-8编码就行了。属于非智力相关的内容。所以不用太在意。会用就可以了。

这样看来,发个邮件什么的也不是很难嘛。(^__^) 嘻嘻……

错误总结

错误一:500、530等5开头的错误,大致为什么ssh异常啊什么的。有点web常识的都知道,5开头的错误代码一般都是服务器内部的错误,所以这基本上可以判断出我们的代码其实没有出错。我们主要的排错方向应该是服务器端了(当然了,凡是没有任何的绝对,但这种情况出现的概率确实是很小的)。这时,我们要检查一下自己的邮箱的SMTP/POP服务开启了没有啊等等

错误二:授权码没有写或者填写成了自己的邮箱之前的密码,错误提示一般都是认证相关的。这一点属于低级错误了。因为在配置完自己的SMTP/POP服务之后,系统会发还一个短信提示,告知用户要使用授权码替代原密码登陆邮箱。所以使用你的授权码进行登录呗。

错误三:代码中的错误。这就更加的不应该了,少写了必填项,或者编码没添加等类似的错误是我们应该极力避免的,所以尽量保证自己的代码的正确。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python函数参数类型*、**的区别
Apr 11 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
python实现一组典型数据格式转换
Dec 15 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Python猴子补丁知识点总结
Jan 05 Python
python通过matplotlib生成复合饼图
Feb 06 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
python 基于opencv操作摄像头
Dec 24 Python
Elasticsearch 批量操作
Apr 19 Python
python邮件发送smtplib使用详解
Jun 16 #Python
Python3多线程操作简单示例
May 22 #Python
Python3基于sax解析xml操作示例
May 22 #Python
Python smtplib实现发送邮件功能
May 22 #Python
linux下python使用sendmail发送邮件
May 22 #Python
Python实现的文本对比报告生成工具示例
May 22 #Python
python smtplib模块实现发送邮件带附件sendmail
May 22 #Python
You might like
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
专升本个人自我评价
2013/12/22 职场文书
工作过失检讨书
2014/02/23 职场文书
护理中职生求职信范文
2014/02/24 职场文书
职工小家建设活动方案
2014/08/25 职场文书
爱心助学感谢信
2015/01/21 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
2015年效能监察工作总结
2015/04/23 职场文书