Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SMTP库可以';无法处理IPv6_Python_Sockets_Debugging_Smtp_Ipv6 - Fatal编程技术网

Python SMTP库可以';无法处理IPv6

Python SMTP库可以';无法处理IPv6,python,sockets,debugging,smtp,ipv6,Python,Sockets,Debugging,Smtp,Ipv6,如何在SMTP库上添加IPv6选项 当我尝试使用IPv6连接到SMTP时,出现以下错误: smtpserver = smtplib.SMTP("smtp.gmail.com", 587, source_address=('2a00:xxxx:5::1e7', 80, 0, 0)) 错误:TypeError:AF\u INET地址必须是一对(主机、端口) 这意味着smtplib.py不支持IPv6 我找到一篇关于这个的文章“https://bugs.python.org/i

如何在SMTP库上添加IPv6选项

当我尝试使用IPv6连接到SMTP时,出现以下错误:

 smtpserver = smtplib.SMTP("smtp.gmail.com", 587, source_address=('2a00:xxxx:5::1e7', 80, 0, 0))
错误:
TypeError:AF\u INET地址必须是一对(主机、端口)

这意味着smtplib.py不支持IPv6

我找到一篇关于这个的文章“https://bugs.python.org/issue3461" . 我试图将补丁添加到我的smtplib.py中,但没有成功

谁能帮我做这个

错误消息具有误导性。在Linux上执行
strace
表明它实际上试图绑定到给定的IP和端口,但失败了,然后发出了错误消息。它失败的原因可能有多种,但典型的情况可能是没有权限投标该端口(此处绑定到端口80需要根权限),或者该端口已被另一个套接字使用(端口80通常用于web服务器)

通常,最好只指定IP地址,将端口保留为0。这样,它将使用给定的IP地址作为源IP,但选择一个随机(临时)端口作为源端口

我找到一篇关于这个的文章“https://bugs.python.org/issue3461"


这是无关的。它仅与SMTP对话框中EHLO命令中显示的发件人有关。如果这是一个问题,只需给出与
local\u hostname
参数一起使用的值。

您可能需要将IPv6地址用括号括起来(
[
]
)。这是某些事情所必需的,例如在URI中。我尝试过:source_address=(“[2a00:xxxx:5::1e7]”,80,0,0))和source_address=(['2a00:xxxx:5::1e7'],80,0,0])以及source_address=(['2a00:xxxx:5::1e7',80,0,0])没有人工作。关于端口,我有问题。当我选择端口0时,它工作,但当我选择端口80时,它不工作,因为端口80已经正确使用了?同样,如果有3个smtp在同一ipv6“2a00:xxxx:5::1e7”上运行,每个脚本应该有不同的端口?例如'2a00:xxxx:5::1e7',0,0,0然后'2a00:xxxx:5::1e7',1,0,0然后'2a00:xxxx:5::1e7',2,0,0?正如您告诉我的,端口=0将随机选择。它在1个smtp上工作,但是当我测试100个smtp时,例如,我得到了相同的错误:AF_INET address必须是一对(主机、端口)@Addicted Programming:同样,这个错误是误导性的,并且隐藏了真正的错误。例如,您可能违反了打开文件描述符的限制。如果您根本不指定
源地址
,很可能会发生这种情况,只会得到一个更现实的错误。好的@Steffen非常感谢您的回答
... source_address=('2a00:xxxx:5::1e7', 80, ...