python发邮件报错[Errno -2] Name or service not known或者[Errno 110] Connection timed out,iptables允许发送邮件

因iptables防火墙默认拒绝所有数据包进入,使用Python发送邮件报错。要解决此问题,需开放源端口25和53的数据进入,分别对应邮件发送和向DNS服务器查询域名,给出了具体的iptables命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为iptables防火墙是默认拒绝所有的数据包进入,出去数据都是允许,无法用python发送邮件,报错信息为[Errno -2] Name or service not known或者[Errno 110] Connection timed out

要想发送邮件必须开放源端口为25和53的数据进入。

具体命令为:

iptables -t filter -I INPUT -p tcp --sport 25 -j ACCEPT

iptables -t filter -I INPUT -p udp --sport 53 -j ACCEPT

要开放源端口53因为发邮件需要向DNS服务器查询域名,所以必须允许源端口53的数据进入。

### Ubuntu 启动接口时遇到 `errno -2` 错误解决方案 当在 Ubuntu 中启动网络接口时遇到 `errno -2, Name or service not known` 的错误提示,这通常意味着系统无法解析指定的域名或服务名称。此问题可能由多种原因引起。 #### 可能的原因分析 1. **DNS 配置问题** DNS 设置不正确可能导致系统无法解析主机名到 IP 地址。应检查 `/etc/resolv.conf` 文件中的 DNS 服务器地址是否有效[^1]。 2. **网络连接未建立** 如果设备尚未获得有效的 DHCP 租约,则可能会发生此类错误。可以尝试重启网络服务来获取新的租约。 3. **hosts 文件配置不当** 检查 `/etc/hosts` 文件是否有正确的条目用于本地主机映射。任何拼写错误都可能导致解析失败。 4. **临时性网络波动** 对于某些情况下的瞬态网络中断,可以通过增加重试机制提高稳定性。对于 Python 应用程序而言,可采用如下方法处理 socket 连接超时的情况: ```python import socket domain_name = 'example.com' ip_address = None max_retries = 5 retries = 0 while not ip_address and retries < max_retries: try: ip_address = socket.gethostbyname(domain_name) break except socket.gaierror as e: print(f"Socket Error: {str(e)}") retries += 1 continue ``` 上述代码展示了如何通过循环多次尝试解析给定域名直至成功或达到最大重试次数为止的方法[^2]。 为了更具体地解决问题,建议按照以下步骤操作: - 查看当前系统的 DNS 配置并验证其有效性; - 使用命令行工具如 `ping`, `nslookup` 或者 `dig` 测试目标域名能否被正常解析; - 若是在虚拟机环境中运行,请确认宿主机与客户操作系统之间的网络设置无误; - 更新软件包列表以及安装最新的安全补丁,确保所有组件处于最新状态;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~芜痕~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值