如何通过Data Factory发送含SSMS表查询结果附件的邮件?
从SSMS表取数并通过Data Factory发送带附件邮件的实现方案
方案1:优化现有Logic App+Data Factory流程(解决附件问题)
之前的问题核心是直接传递Lookup的JSON输出无法被Logic App识别为附件,需要先将数据转成可识别的文件格式,再通过Logic App发送:
- 步骤1:在ADF中导出查询结果为文件
- 若数据量≤5000行:先用Lookup活动执行SQL查询获取数据,再通过Copy活动将数据写入Azure Blob存储的CSV/Excel文件(源选SQL查询结果,目标选Blob存储,指定文件路径和格式)。
- 若数据量>5000行:直接用Copy活动从SSMS表导出数据到Blob存储的CSV/Excel文件,跳过Lookup活动。
- 步骤2:修改Logic App配置
- 保持HTTP触发方式,添加Get blob content步骤:连接你的Blob存储,通过ADF传递的文件路径参数定位目标文件。
- 添加**Send email (V2)**步骤:
- 收件人字段引用ADF传入的
receiver参数 - 附件区域选择"添加附件",将Get blob content的输出作为附件内容,设置文件名(如
data_report.csv) - 邮件主题/正文可结合ADF传入的
DatafactoryName、pipelineName参数动态生成
- 收件人字段引用ADF传入的
- 步骤3:更新ADF Web活动的请求Body
新增文件路径参数,示例:{ "filePath": "reports/data_report.csv", "DatafactoryName": "@{pipeline().DataFactory}", "pipelineName": "@{pipeline().PipelineName}", "receiver": "@{variables('receiver')}" }
方案2:直接用Data Factory内置Send Email活动(无需Logic App)
若ADF可连接Office 365或SendGrid,可直接完成全流程:
- 步骤1:同方案1,用Copy活动将SSMS表数据导出到Azure Blob存储的CSV/Excel文件。
- 步骤2:在ADF管道中添加Send Email活动
- 配置邮件连接器(Office 365 Outlook或SendGrid)
- 邮件设置:
- 收件人填
@{variables('receiver')} - 主题/正文按需设置,比如
@{pipeline().PipelineName} 数据报告 - 附件区域选择"存储文件",连接Blob存储并指定导出的文件路径,或用动态内容引用路径。
- 收件人填
关键注意点
- 数据量限制:Lookup活动最多返回5000行,数据量大必须用Copy活动导出到存储,不能直接传Lookup输出。
- 文件格式:优先用CSV或Excel作为附件格式,避免直接传递JSON结构,确保邮件客户端可正常解析。
- 权限配置:确保ADF拥有SQL表读取权限、Blob存储写入权限;若用Logic App,需赋予其Blob存储读取权限和邮件发送权限。
内容的提问来源于stack exchange,提问作者Priyom
相关产品推荐
相关产品推荐

