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 相关文章推荐
python用ConfigObj读写配置文件的实现代码
Mar 04 Python
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Django密码系统实现过程详解
Jul 19 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 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
德生PL990的分析评价
2021/03/02 无线电
source.php查看源文件
2006/12/09 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
python设置检查点简单实现代码
2014/07/01 Python
Python open()文件处理使用介绍
2014/11/30 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
python matlibplot绘制3D图形
2018/07/02 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
Python 3.8 新功能全解
2019/07/25 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
Python无损压缩图片的示例代码
2020/08/06 Python
美术师范毕业生自荐信
2013/11/16 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
学生检讨书怎么写
2014/10/09 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
Nginx配置Https安全认证的实现
2021/05/26 Servers
Python Matplotlib库实现画局部图
2021/11/17 Python