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标准库与第三方库详解
Jul 22 Python
python实现识别相似图片小结
Feb 22 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
新手入门Python编程的8个实用建议
Jul 12 Python
python实现猜数游戏
Mar 27 Python
Python代码中如何读取键盘录入的值
May 27 Python
Python机器学习之逻辑回归
May 11 Python
用 Python 元类的特性实现 ORM 框架
May 19 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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 分页分组类
2009/12/10 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
2007/09/04 Javascript
jquery map方法使用示例
2014/04/23 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
python多进程实现文件下载传输功能
2018/07/28 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
介绍一下OSI七层模型
2012/07/03 面试题
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
财务会计人员求职的自我评价
2014/01/13 职场文书
询价采购方案
2014/06/09 职场文书
民主生活会发言材料
2014/10/20 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL