python发送邮件时遇见ASCII编码错误的一种解决方案

在我用Python发送邮件时报错:UnicodeEncodeError: 'ascii' codec can't encode character '\u6052' in position 5: ordinal not in range(128),就算是我把代码中的所有中文字符串改成英文的还是报相同的错误

当时在网上搜了很多解决办法都没有用,问了老师,也没碰到过这种情况,当时真的是麻爪了,作为一个计算机的小白只能硬着头皮自己解决.

首先我将上面报错中的'\u6052'进行转码,看看这是个什么东西,Unicode转中文,竟然是个'恒'字,我名字当中的一个字,可是我写的整篇代码中都没有这个字.老师说不能轻易的碰源码,但是到了这个时候只能死马当作活马医,我通过断点源码smtplib.pyi,发现有个参数s是'ehlo 恒.lan',这个ehlo是什么东西我不知道,但我估计问题出在这上面,如下图:

于是我就查了一下文档看看这个ehlo是干什么用的,如下图:

原来是它在源码中获取我本机的完全限定域名,然后我打开cmd,输入hostname查看(文档中写了默认用本地主机的完全限定域名作为标识),本机的限定域名果然是'恒' 。于是我尝试在我的代码中指定标识的名字,如下图:

 然后再次运行代码,发送成功。

一定要记住:server.ehlo("xxx")括号里一定不能出现ASCII所认为的非法字符和中文,否则就会报上述错误。

如果想一劳永逸的解决本机的限定域名问题,可以在电脑上进行更改,以我win11为例,步骤如下

控制面板-->系统和安全--->系统--->域或工作组---->更改---->计算机名(C)下面的框里面更改,改完之后重新启动(改完之后点击确定会弹出对话框,再点击重新启动,启动之后,你本机的限定域名就更改成功了)

1、打开控制面板,点击“系统和安全”

2、点击“系统” 

3、点击 "域或工作组" 

 

4 、点击“更改”

 

5、在输入框中更改名称 

 

6、更改之后点击确定,弹出对话框点击确定,然后会弹出一个重新启动的框,点击重新启动,重新启动之后就可以了

查看本机限定域名可以用cmd,输入hostname进行查看

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值