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控制台显示时钟的示例
Feb 24 Python
Python pickle模块用法实例分析
May 27 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
Python算法之图的遍历
Nov 16 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
浅析Python语言自带的数据结构有哪些
Aug 27 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
学习Python列表的基础知识汇总
Mar 10 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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中函数内引用全局变量的方法
2008/10/20 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
微信小程序录音与播放录音功能
2017/12/25 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python socket模块方法实现详解
2019/11/05 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
JAVA高级程序员面试题
2013/09/06 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
成品仓管员工作职责
2013/12/29 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
购房意向书
2014/04/01 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
小学五年级学生评语
2014/04/22 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
综合测评自我评价
2015/03/06 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL