python - Python SMTP 库无法处理 IPv6
问题描述
请问如何在 SMTP 库上添加 IPv6 选项?
当我尝试使用 IPv6 连接到 SMTP 时,出现此错误:
smtpserver = smtplib.SMTP("smtp.gmail.com", 587, source_address=('2a00:xxxx:5::1e7', 80, 0, 0))
错误 :TypeError: AF_INET address must be a pair (host, port)
这意味着 smtplib.py 不支持 IPv6
我发现了一篇关于“https://bugs.python.org/issue3461”的文章。我试图将补丁添加到我的 smtplib.py 但它不起作用
谁能帮我做到这一点?
解决方案
... source_address=('2a00:xxxx:5::1e7', 80, ...
错误消息具有误导性。在 Linux 上执行strace
操作表明它实际上尝试绑定到给定的 IP 和端口但失败 - 然后发出这个误导性错误消息。失败的原因可能有多种,但典型的情况可能是没有对端口的出价权限(如这里所做的那样绑定到端口 80 需要 root 权限)或者该端口已被另一个套接字使用(端口 80 是通常用于网络服务器)。
一般来说,最好只指定 IP 地址并将端口保留为 0。这样它将使用给定的 IP 地址作为源 IP,但选择一个随机(临时)端口作为源端口。
我发现了一篇关于“https://bugs.python.org/issue3461”的文章
这是无关的。它仅与 SMTP 对话期间 EHLO 命令中显示的发件人有关。如果这是一个问题,只需给出与参数一起使用的值local_hostname
。
推荐阅读
- python - 尝试运行 pyinstaller 创建的 .exe 文件时“执行脚本失败”
- css - 完整的单词应该在同一行呈现
- couchbase - 我正在使用 CouchbaseMock 进行单元测试,其中 Couchbase 客户端会将 N1QL 查询发送到模拟服务器
- php - string 和 int 值相加的输出是什么?
- c# - 获取 ntlm 令牌(www-authenticate - 标头)
- php - 使用 CallbackFilter 搜索多个子模型字段时,类没有名为 user.email 的字段或关联
- react-native - expo build:ios 时 Unicode 规范化不适用于 ASCII-8BIT
- unity3d - 使用 Jenkins Xcode 插件构建项目时出现异常
- c++ - 将 .pb 转换为 ff-lite 时不了解平均值和标准差值
- c++ - 连续光线投射之间的时间延迟