python发送邮件学习
来源:互联网 发布:在手机上怎么注册淘宝 编辑:程序博客网 时间:2024/05/29 04:48
一个简单的邮件发送的例子,代码如下:
import smtplibfrom email.mime.text import MIMETextsmtp_server = 'smtp.qq.com'email_user = 'xxxxxxxxxx@qq.com'email_pass = ''()sender = email_userreceiver = 'xxxxxxxxx@qq.com'msg = MIMEText(u'test')server = smtplib.SMTP_SSL(smtp_server, 465)server.set_debuglevel(1)server.login(email_user, email_pass)server.sendmail(sender, receiver, msg.as_string())server.quit()print('finish')
但是我在自己电脑上面执行这个代码的时候竟然报错了
从错误信息上来看是因为我的代码里面有中文字符串导致编码格式有问题,但是本身这个代码里面是没有任何中文输入输出的,所以只能单步调试,调试哪里出现了中文入参。
当调试到:
fqdn = socket.getfqdn()
这里下一步的时候会跳转到这里
并且input入参里面有中文名,查看前后文发现这里是获取了我的计算机名。然后在这里抛出异常
try: hostname, aliases, ipaddrs = gethostbyaddr(name) except error: pass
因为我后面又写了一段测试程序来验证这个问题:
import socketa = socket.gethostname()print(a)b = socket.gethostbyaddr(a)print(b)
执行出来的结果和上面的一直,socket.gethostaddr()的时候传入的中文字符串会抛出错误。
这里可以看出来socket.gethostbyaddr是直接将 张彬彬 三个汉字直接作为入参传入的,而没有经过编码处理,所以我改了socket.py里面的代码,有两个改法:
1、hostname, aliases, ipaddrs = gethostbyaddr(name.encode())
传入编码后的值,这样下面识别的时候还是识别张彬彬这三个汉字,只是编码过后的结果而已。
2、hostname, aliases, ipaddrs = gethostbyaddr(repr(name))
使用repr方法将name转为机器可以识别的字符串格式,这里就可以很明显的区分str和repr的区别,使用repr之后结果正常,而是用str()则不可行,我的猜想是gethostbyaddr就已经是面向底层的东西了,所以需要编码过后的或者面向底层的格式才可以,所以repr返回的结果可以被接受,而str不可行。因为gethostbyaddr()这个方法的实现我已经找不到了,所以猜测是调用的底层库。
这点欢迎大家讨论,我只是用python3.6.3测试出来的结果。
- python 发送邮件学习
- python发送邮件学习
- 学习使用python发送邮件
- Python学习 简易发送邮件
- 【python学习.邮件的发送】
- Python 学习笔记 发送邮件
- python学习之 发送邮件
- 8.python学习笔记:python发送邮件
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- PYTHON功能学习之邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- 转:python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python中的切片操作
- nextAfter
- CXF
- 通过mvn dependency:tree 查看依赖树,解决依赖jar冲突问题
- hadoop学习(七)----mapReduce原理以及操作过程
- python发送邮件学习
- RecyclerView添加虚线分割线
- Eclipse中关闭html或jsp页面的视图窗口
- Android opencv(四)轮廓检测
- WEB-INF和META-INF目录详解
- 用eclipse开发工具,maven进行包管理,整合SSH框架
- JSP、Servlet中的相对路径和绝对路径 页面跳转问题
- Leetcode | Delete and Earn
- 二叉树的简介