Python SMTP发送邮件遇到的一些问题及解决办法


Posted in Python onOctober 24, 2018

Python练习内容:

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

首先,我们来构造一个最简单的纯文本邮件:

from email.mime.text import MIMEText
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

注意到构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。

然后,通过SMTP发出去:

# 输入Email地址和口令:from_addr = input('From: ')
password = input('Password: ')# 输入收件人地址:to_addr = input('To: ')# 输入SMTP服务器地址:smtp_server = input('SMTP server: ')import smtplib
server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。

如果一切顺利,就可以在收件人信箱中收到我们刚发送的Email​

​————————分割线,以上都是资料内容​————————

使用过程中我遇到了一些问题,或者是之前作者没有表述清楚

我使用的是163邮箱

1、首先作者没有提醒我,要确保自己的邮箱地址开启了smtp服务,并设置客户端授权登陆密码

Python SMTP发送邮件遇到的一些问题及解决办法

2、发送邮件时,password应该填写邮箱的授权登陆码,而不是自己的邮箱密码。

3、按照以上代码运行,会报​错

​Traceback (most recent call last):
 File "mailDemo.py", line 24, in
 server.sendmail(from_addr,[to_addr],msg.as_string())
 File "C:\Program Files\Python35-32\lib\smtplib.py", line 878, in sendmail
 raise SMTPDataError(code, resp)

应该在代码中加上:

#发送邮箱地址
msg['From'] = from_addr
#收件箱地址
msg['To'] = to_addr
#主题
msg['Subject'] = 'the frist mail'

4、在公司环境运行没问题的代码,在自己家的网络下又遇到了一系列问题,运行时报。

Traceback (most recent call last):
File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 13, in <module>
 server = smtplib.SMTP(smtp_server,25)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/smtplib.py", line 253, in __init__
 raise SMTPConnectError(code, msg)
smtplib.SMTPConnectError: (554, b'IP<114.111.167.154> in blacklist')

我也不知道这个114.111.167.154是那里的IP,我将自己电脑的翻墙代理关闭,重启了路由器解决了。

5、发送邮件时报错:

Traceback (most recent call last):
File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 21, in <module>
 server.sendmail(from_addr, [to_addr], msg.as_string())
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/smtplib.py", line 878, in sendmail
 raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (554, b'DT:SPM 163 smtp10,DsCowAA3h9_QbgZXI9_fCQ--.713S2 1460039376,please see http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376')

我查了一下页面http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376,是发生了退信行为,后来我关闭了路由器,连接了自己手机分享的热点,才发送成功。

至于家里的网络为啥会出问题,我还的再研究。

完整代码如下:

from email.mime.text import MIMEText
msg = MIMEText('hello,send by python...','plain','utf-8')
#发送邮箱地址
from_addr = 'test@163.com'
#邮箱授权码,非登陆密码
password = '123'
#收件箱地址
to_addr = '123456@qq.com'
#smtp服务器
smtp_server = 'smtp.163.com'
#发送邮箱地址
msg['From'] = from_addr
#收件箱地址
msg['To'] = to_addr
#主题
msg['Subject'] = 'the frist mail'
import smtplib
server = smtplib.SMTP(smtp_server,25)
server.set_debuglevel(1)
print(from_addr)
print(password)
server.login(from_addr,password)
server.sendmail(from_addr,[to_addr],msg.as_string())
server.quit()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Swift中的协议(protocol)学习教程
Jul 08 Python
python实现rsa加密实例详解
Jul 19 Python
python实现百度语音识别api
Apr 10 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
python获取对象信息的实例详解
Jul 07 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 #Python
python实现在图片上画特定大小角度矩形框
Oct 24 #Python
python多进程使用及线程池的使用方法代码详解
Oct 24 #Python
python实现图片筛选程序
Oct 24 #Python
用pycharm开发django项目示例代码
Oct 24 #Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 #Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 #Python
You might like
PHP Error与Logging函数的深入理解
2013/06/03 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
Python 对象中的数据类型
2017/05/13 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
RetroStage德国:复古服装
2019/02/03 全球购物
Android面试宝典
2013/08/06 面试题
中专自我鉴定范文
2013/10/16 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
教师绩效考核方案
2014/01/21 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
重阳节标语大全
2014/10/07 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
红色经典电影观后感
2015/06/18 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
MySQL自定义函数及触发器
2022/08/05 MySQL