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

如何在Logic App触发跳过或Blob存储上传失败时触发邮件?

Logic App 两种场景触发邮件的实现方案(含IAC部署指导)

完全可以实现这两种场景的邮件触发,以下是具体实现步骤和IAC部署的新手友好指导:

一、两种场景的邮件触发逻辑

1. 触发器「跳过」状态(未找到SFTP文件)

每日定时触发器会准时运行,你需要在触发器后添加条件判断:

  • 先调用SFTP连接器的「列出文件」动作,获取目标路径下的文件列表。
  • 添加「如果」条件,判断文件列表是否为空(表达式:@empty(body('列出文件')))。
  • 若条件成立(无文件),直接调用邮件发送动作(如Office 365 Outlook),告知本次运行未检测到文件。

2. 上传Blob存储失败

针对上传失败的场景,利用Logic App的错误分支处理:

  • 在「上传至Blob存储」动作右侧,点击「添加分支」选择「失败时」。
  • 在该分支中添加邮件发送动作,标题设为错误告警,内容里通过表达式@{actions('上传至Blob存储').error.message}抓取具体错误信息,方便排查问题。
  • 进阶优化:可以把「上传Blob」和「删除SFTP文件」动作放进一个「范围」容器中,给范围设置错误处理,这样整个流程环节出错都会触发告警,更严谨。

二、IAC方式部署(以Bicep为例,新手友好)

对于IAC新手,Bicep比ARM模板更简洁易读,以下是核心代码和部署步骤:

核心Bicep代码片段

resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
  name: 'daily-sftp-to-blob-workflow'
  location: resourceGroup().location
  properties: {
    definition: {
      '$schema': 'https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#'
      contentVersion: '1.0.0.0'
      triggers: {
        Daily_Recurrence: {
          type: 'Recurrence'
          recurrence: {
            frequency: 'Day'
            interval: 1
            // 可添加具体触发时间,比如每天凌晨2点:startTime: '02:00:00'
          }
        }
      }
      actions: {
        List_SFTP_Files: {
          type: 'ApiConnection'
          inputs: {
            host: {
              connection: {
                name: '@parameters(\'$connections\')[\'sftp\'][\'connectionId\']'
              }
            }
            method: 'get'
            path: '/datasets/default/foldersV2/@{encodeURIComponent(\'/your-target-sftp-path\')}/files'
          }
        }
        Check_File_Existence: {
          type: 'If'
          expression: '@empty(body(\'List_SFTP_Files\'))'
          actions: {
            Send_No_File_Alert: {
              type: 'ApiConnection'
              inputs: {
                host: {
                  connection: {
                    name: '@parameters(\'$connections\')[\'office365\'][\'connectionId\']'
                  }
                }
                method: 'post'
                path: '/v2/Mail/Send'
                body: {
                  Subject: 'Logic App运行通知:未检测到SFTP文件'
                  Body: '<p>今日定时运行未在SFTP路径 <strong>/your-target-sftp-path</strong> 下找到任何文件。</p>'
                  To: 'your-alert-email@example.com'
                }
              }
            }
          }
          else: {
            actions: {
              Upload_To_Blob: {
                type: 'ApiConnection'
                inputs: {
                  host: {
                    connection: {
                      name: '@parameters(\'$connections\')[\'azureblob\'][\'connectionId\']'
                    }
                  }
                  method: 'post'
                  path: '/datasets/default/files'
                  body: '@body(\'List_SFTP_Files\')[0].content'
                  queryParameters: {
                    folderPath: '/your-blob-container-path'
                    name: '@body(\'List_SFTP_Files\')[0].name'
                  }
                }
              }
              Send_Upload_Failure_Alert: {
                type: 'ApiConnection'
                inputs: {
                  host: {
                    connection: {
                      name: '@parameters(\'$connections\')[\'office365\'][\'connectionId\']'
                    }
                  }
                  method: 'post'
                  path: '/v2/Mail/Send'
                  body: {
                    Subject: 'Logic App错误告警:Blob上传失败'
                    Body: '<p>今日SFTP文件上传至Blob失败,错误详情:<br><strong>@{actions(\'Upload_To_Blob\').error.message}</strong></p>'
                    To: 'your-alert-email@example.com'
                  }
                }
                runAfter: {
                  Upload_To_Blob: [
                    'Failed'
                  ]
                }
              }
              Delete_SFTP_File: {
                type: 'ApiConnection'
                inputs: {
                  host: {
                    connection: {
                      name: '@parameters(\'$connections\')[\'sftp\'][\'connectionId\']'
                    }
                  }
                  method: 'delete'
                  path: '/datasets/default/files/@{encodeURIComponent(body(\'List_SFTP_Files\')[0].id)}'
                }
                runAfter: {
                  Upload_To_Blob: [
                    'Succeeded'
                  ]
                }
              }
            }
          }
        }
      }
      outputs: {}
    }
    parameters: {
      '$connections': {
        value: {
          sftp: {
            connectionId: resourceId('Microsoft.Web/connections', 'sftp-connection')
            connectionName: 'sftp-connection'
            id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroup().location}/managedApis/sftp'
          }
          office365: {
            connectionId: resourceId('Microsoft.Web/connections', 'office365-outlook-connection')
            connectionName: 'office365-outlook-connection'
            id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroup().location}/managedApis/office365'
          }
          azureblob: {
            connectionId: resourceId('Microsoft.Web/connections', 'azure-blob-connection')
            connectionName: 'azure-blob-connection'
            id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroup().location}/managedApis/azureblob'
          }
        }
      }
    }
  }
}

新手部署步骤

  1. 前置准备:在Azure门户手动创建SFTP、Office 365 Outlook、Azure Blob的连接器,并记录它们的名称(对应代码中的sftp-connection、office365-outlook-connection等)。
  2. 参数替换:将代码中的SFTP路径、Blob容器路径、告警邮箱等参数替换为你实际的信息。
  3. 部署执行:
    • 安装Azure CLI并登录Azure账号。
    • 创建资源组(若已有则跳过):
      az group create --name your-resource-group-name --location eastus
      
    • 运行部署命令:
      az deployment group create --resource-group your-resource-group-name --template-file logic-app.bicep
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:30:54