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

作者:Marksinoberg 时间:2022-08-14 21:01:32 

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

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

来源:https://blog.csdn.net/Marksinoberg/article/details/51501377

标签:python,smtplib,邮件
0
投稿

猜你喜欢

  • PHP xpath()函数讲解

    2023-06-04 07:03:38
  • nodejs+mysql实现用户相关的增删改查的详细操作

    2024-01-26 10:34:45
  • python 格式化输出百分号的方法

    2023-07-17 08:23:27
  • 解决python DataFrame 打印结果不换行问题

    2023-11-20 23:12:25
  • asp如何显示全部的环境变量?

    2010-06-08 09:34:00
  • tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用

    2022-06-29 16:23:40
  • Python time时间格式化和设置时区实现代码详解

    2023-05-17 00:09:17
  • 基于Pygame实现简单的贪吃蛇游戏

    2022-05-14 17:43:10
  • Flask URL传参与视图映射的实现方法

    2021-05-10 12:31:06
  • ADSI+ASP添加IP到IIS禁止访问列表中

    2011-04-02 10:42:00
  • Python使用python-docx读写word文档

    2023-12-27 06:27:30
  • PyTorch的torch.cat用法

    2023-11-26 08:57:32
  • 教你怎样打造SQL Server2000的安全策略

    2009-01-23 14:03:00
  • Python使用getpass库读取密码的示例

    2023-10-16 04:48:28
  • OpenCV半小时掌握基本操作之分水岭算法

    2023-04-10 11:24:51
  • 微信小程序canvas写字板效果及实例

    2024-04-19 09:44:03
  • Go语言实现互斥锁、随机数、time、List

    2024-04-25 15:11:24
  • 详解Python如何使用并发模型编程

    2021-10-30 06:39:23
  • 利用python3如何给数据添加高斯噪声

    2023-06-11 20:52:17
  • pyqt5 使用label控件实时显示时间的实例

    2021-01-29 14:54:17
  • asp之家 网络编程 m.aspxhome.com