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 相关文章推荐
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
python实现简易云音乐播放器
Jan 04 Python
python如何通过实例方法名字调用方法
Mar 21 Python
对Python中type打开文件的方式介绍
Apr 28 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Python pickle模块常用方法代码实例
Oct 10 Python
python中reload重载实例用法
Dec 15 Python
Python&Matlab实现樱花的绘制
Apr 07 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
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
浅析从vue源码看观察者模式
2018/01/29 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python----数据预处理代码实例
2019/03/20 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
青年创业培训欢迎词
2014/01/10 职场文书
司法所长先进事迹
2014/06/02 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
法定代表人证明书
2014/11/28 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
唐山大地震观后感
2015/06/05 职场文书
golang正则之命名分组方式
2021/04/25 Golang
HTML基础详解(上)
2021/10/16 HTML / CSS
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技