博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python模块探秘之smtplib,实现纯文本邮件的发送
阅读量:6705 次
发布时间:2019-06-25

本文共 2115 字,大约阅读时间需要 7 分钟。

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


配置你的邮箱

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

因为我们申请的一些免费邮箱都是默认不开启smtp/pop协议的。

SMTP是发邮件使用到的计算机网络中应用层协议中的一个;而POP则是收邮件时使用到的计算机网络中的应用层协议的其中一个。这都是理论性的知识了,上过计算机网络这门课的想必都知道,就不多说了。

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

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

使用代码发邮件

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

# coding:utf-8import smtplibfrom email.mime.text import MIMETextfrom 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

这里写图片描述

确实是成功发送了的。

代码探查

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

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服务之后,系统会发还一个短信提示,告知用户要使用授权码替代原密码登陆邮箱。所以使用你的授权码进行登录呗。

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

你可能感兴趣的文章
【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别
查看>>
python基础复习 11
查看>>
java.io.File中的绝对路径和相对路径.
查看>>
解决trim兼容性
查看>>
windows 控制台cmd乱码(及永久修改编码)的解决办法
查看>>
War包反编译过程
查看>>
Linux性能测试 top命令
查看>>
IOS-UI基础-UIView和UIViewController
查看>>
sql ROW_NUMBER() 排序函数
查看>>
无源晶振加反相器变有源分析与总结
查看>>
圆角边框以及阴影制作卡片式图片 - 学习笔记
查看>>
Access an instance through a console
查看>>
正则表达式[] 和{}
查看>>
手机产品设计禁忌(转)
查看>>
laravel使用多个数据库连接
查看>>
css3 闪烁效果
查看>>
Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】...
查看>>
JQUERY 选择器
查看>>
win7 环境下实现faster-rcnn
查看>>
mac安装python3
查看>>