Azure Synapse Notebook中PySpark调用starttls()报错及异常邮件通知咨询
问题解决方案
问题一:Azure Synapse Notebook运行出错时在Synapse内发送邮件
- 异常捕获+Azure Function实现
在PySpark代码中通过try-except捕获异常,触发错误时调用预先部署的Azure Function完成邮件发送。示例代码:
注意:需在Azure Function中编写SMTP发邮件逻辑,同时确保Synapse工作区防火墙允许访问Function的端点。try: # 你的业务代码 df = spark.read.table("your_target_table") # ...其他数据处理操作 except Exception as e: import requests # 替换为你的Function触发地址 func_endpoint = "https://your-function-name.azurewebsites.net/api/send-error-email" # 传递错误详情和Notebook标识 requests.post(func_endpoint, json={"error_info": str(e), "notebook_name": "当前Notebook名称"}) - 异常捕获+Logic Apps调用
同样在异常块内调用Logic Apps的HTTP触发地址,Logic Apps通过可视化配置(比如Office 365 Outlook连接器)完成邮件发送,无需编写额外代码,配置更快捷。
问题二:PySpark代码SMTP STARTTLS报错的解决办法
报错原因
Synapse Spark池的网络环境与本地不同,可能限制了对smtp-mail.outlook.com:587端口的STARTTLS扩展访问,导致协议交互失败。
具体解决方法
- 改用SSL直接连接465端口
跳过STARTTLS步骤,使用SMTP_SSL直接连接outlook的465端口,修改后代码:import smtplib # 直接通过SSL连接465端口 smtp = smtplib.SMTP_SSL("smtp-mail.outlook.com", 465) smtp.login("你的outlook邮箱账号", "邮箱授权码/密码") # 后续邮件发送逻辑保持不变 - 检查Synapse网络配置
若Synapse工作区启用了虚拟网络,需确认出站规则允许访问smtp-mail.outlook.com的587/465端口,或该域名已加入允许的FQDN列表。 - 替换为Azure通信服务发送邮件
避免依赖第三方SMTP服务器,使用Azure通信服务的邮件SDK在PySpark中调用,更适配Azure环境的安全规范,也能规避SMTP协议的各类限制。
内容的提问来源于stack exchange,提问作者datawrangler
相关产品推荐
相关产品推荐

