无需第三方API的Azure Functions企业邮件发送方案(供Snowflake调用)
完全存在不需要借助SendGrid、MailGun等第三方邮件API的实现方案,以下是两种可行的落地路径,以及对接Snowflake外部函数的配置方法:
方案1:SMTP直连企业域名邮箱(通用方案,适配所有支持SMTP的企业邮箱)
这个方案直接调用企业邮箱本身的SMTP服务发送邮件,不需要引入任何外部第三方邮件服务,适用性最广。
前置要求
- 你的企业域名邮箱已开启SMTP发送权限,获取到SMTP服务器地址、端口、发件人邮箱账号、发件人授权码(部分服务商叫应用密码)
Azure Functions核心实现示例(Python运行时)
直接用Python标准库实现,不需要额外安装第三方依赖:
import azure.functions as func import smtplib from email.mime.text import MIMEText from email.header import Header def main(req: func.HttpRequest) -> func.HttpResponse: # 从Snowflake外部函数的请求中获取参数 req_body = req.get_json() recipient = req_body.get('recipient') subject = req_body.get('subject') content = req_body.get('content') # 企业邮箱SMTP配置,替换为你自己的参数 smtp_server = 'smtp.your-company-domain.com' smtp_port = 465 # 一般SSL端口是465,非SSL是25或者587 sender_email = 'notice@your-company-domain.com' sender_auth_code = 'your-smtp-auth-code' # 构造邮件 msg = MIMEText(content, 'plain', 'utf-8') msg['From'] = Header(f"系统通知 <{sender_email}>", 'utf-8') msg['To'] = Header(recipient, 'utf-8') msg['Subject'] = Header(subject, 'utf-8') # 发送邮件 try: server = smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(sender_email, sender_auth_code) server.sendmail(sender_email, recipient, msg.as_string()) server.quit() return func.HttpResponse(status_code=200, body="邮件发送成功") except Exception as e: return func.HttpResponse(status_code=500, body=f"邮件发送失败:{str(e)}")
方案2:Microsoft Graph API发送(仅适配Microsoft 365托管的企业域名邮箱)
如果你的企业域名邮箱是托管在Microsoft 365上的,可直接调用Azure生态内的Graph API发送邮件,不需要开启SMTP权限,权限管控更符合企业合规要求。
前置配置
- 在Azure AD中注册应用,授予应用级别的
Mail.Send权限,由全局管理员授予同意 - 记录该应用的客户端ID、客户端密钥、租户ID
Azure Functions调用逻辑
- 用Azure Identity库获取Graph API访问令牌
- 调用
https://graph.microsoft.com/v1.0/users/{发件人邮箱ID}/sendMail接口发送邮件即可
对接Snowflake外部函数配置步骤
- 配置Azure Functions触发器为HTTP触发,认证方式选择API密钥或者Azure AD认证
- 在Snowflake中创建API集成,关联Azure Functions的访问端点,配置对应访问权限
- 创建Snowflake外部函数,定义入参为收件人、主题、内容等你需要的字段,绑定到Azure Functions的HTTP触发地址
- 测试正常后,即可在Snowflake存储过程中直接调用该外部函数触发邮件发送
注意事项
- 提前为你的发件人域名配置SPF、DKIM、DMARC解析记录,避免邮件被收件方判定为垃圾邮件
- 若使用SMTP方案,注意遵循企业邮箱的发送频率限制,避免触发限流
- 如果Azure Functions的出站IP被企业邮箱服务拦截,将Azure Functions的所有出站IP添加到企业邮箱的白名单即可
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

