You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Databricks Python Notebook发邮件遇gaierror问题求助

问题:Azure Databricks中SMTP发送邮件失败(No address associated with hostname)

我尝试通过公司SMTP服务器从Azure Databricks Python Notebook发送邮件,本地机器运行脚本正常,但在Databricks执行时出现No address associated with hostname错误。

执行脚本

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

server = smtplib.SMTP("COMPANY SMTP SERVER", COMPANY_SMTP_PORT)
fromaddr = "username@companyname.com"
toaddr = "username@companyname.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Email test"
body = "test mail"
msg.attach(MIMEText(body, 'plain'))
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)

错误堆栈信息

gaierror                                  Traceback (most recent call last)
<command-2889814627634467> in <module>
      3 from email.mime.text import MIMEText
      4 
----> 5 server = smtplib.SMTP("COMPANY SMTP SERVER", COMPANY_SMTP_PORT)
      6 fromaddr = "username@companyname.com"
      7 toaddr = "username@companyname.com"

/usr/lib/python3.8/smtplib.py in __init__(self, host, port, local_hostname, timeout, source_address)
    253 
    254         if host:
--> 255             (code, msg) = self.connect(host, port)
    256             if code != 220:
    257                 self.close()

/usr/lib/python3.8/smtplib.py in connect(self, host, port, source_address)
    337             port = self.default_port
    338         sys.audit("smtplib.connect", self, host, port)
--> 339         self.sock = self._get_socket(host, port, self.timeout)
    340         self.file = None

可能原因

  • DNS解析失败:Databricks集群所在网络无法解析公司SMTP服务器的主机名。本地网络能正常解析,但Databricks的VNet/防火墙限制了DNS查询,或者SMTP服务器主机名仅在公司内网可解析,而Databricks集群未接入该内网。
  • 网络连通性限制:Databricks集群的出站规则未允许访问SMTP服务器的端口;或者公司防火墙拒绝了Databricks集群的IP访问SMTP服务。
  • 主机名格式问题:代码中填写的"COMPANY SMTP SERVER"包含空格或格式错误,本地可能通过hosts文件做了映射,但Databricks集群没有对应的配置。

解决方法

  • 验证DNS解析:在Databricks Notebook中执行nslookup COMPANY_SMTP_SERVER或dig COMPANY_SMTP_SERVER(需先安装对应工具),确认是否能解析到SMTP服务器的IP。若无法解析,可将Databricks集群通过VNet peering接入公司内网,或直接使用SMTP服务器的IP地址替代主机名测试。
  • 检查网络规则:
    • 确认Databricks集群的出站安全组/网络ACL允许访问SMTP服务器的端口(常见为25、587或465)。
    • 联系公司IT团队,将Databricks集群的公网IP或VNet范围加入SMTP服务器的访问白名单。
  • 修正主机名配置:确保代码中的SMTP主机名无空格、格式正确;若本地依赖hosts映射,可通过Databricks集群初始化脚本添加对应的hosts条目。
  • 补充认证步骤:多数公司SMTP服务器需要身份认证,本地可能默认使用Windows集成认证,但Databricks中需显式添加server.starttls()和server.login(username, password)步骤(按需配置)。

内容的提问来源于stack exchange,提问作者give_it_a_bit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:57:51