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实现ftp客户端示例分享
Feb 17 Python
Python中自定义函数的教程
Apr 27 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
python简单操作excle的方法
Sep 12 Python
Django2.1.3 中间件使用详解
Nov 26 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
详解python中的模块及包导入
Aug 30 Python
关于Python 常用获取元素 Driver 总结
Nov 24 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
Python 发送SMTP邮件的简单教程
Jun 24 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知道与问问的采集插件代码
2010/10/12 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
webpack打包单页面如何引用的js
2017/06/07 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
用Eclipse写python程序
2018/02/10 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
跟单文员岗位职责
2014/01/03 职场文书
优秀教师先进事迹
2014/01/22 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
学生犯错保证书
2015/05/09 职场文书
竞聘书的秘诀
2019/04/02 职场文书
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang