Como criar uma Azure Logic App para integração de e-mails e Blob Storage
Este tutorial mostra como criar uma Azure Logic App que recebe e-mails (Office 365 Outlook) e guarda automaticamente anexos em Azure Blob Storage. É útil para automatizar a ingestão de ficheiros, reduzir trabalho manual e integrar e-mails com pipelines ETL. Pode poupar dezenas de horas por mês se receber 100-500 anexos, e permite preparar os ficheiros para posterior processamento por Azure Functions, Data Factory ou Power BI.
Pré-requisitos
- Assinatura Azure com permissões para criar recursos. Idealmente tem a role Contributor no Resource Group ou permissões equivalentes para Storage e Logic App.
- Conta Office 365 com acesso ao Outlook/Exchange Online. A autenticação pode ser delegada (conta de utilizador) ou via Service Principal, dependendo do conector.
- Resource Group existente ou permissão para criar um. Recomenda-se um Resource Group dedicado para lógica e armazenamento para facilitar a gestão de custos.
- Conhecimentos básicos do Azure Portal e conceitos de Blob Storage (containers, tiers, lifecycle). É útil saber como copiar strings de ligação (connection strings) ou gerar tokens SAS para depuração.
Passo 1: Criar uma Storage Account e container
Precisamos de uma Storage Account com um container para guardar os anexos. O container pode ser privado porque a Logic App usará credenciais para escrever. Para ambientes de produção escolha replicação adequada (por exemplo, Standard_LRS). A conta pode suportar milhares de ficheiros; se antevê 10k-100k anexos por mês, verifique políticas de lifecycle e tiers (Hot/Cool/Archive) para optimizar custos.
# Exemplo com Azure CLI
az storage account create --name mylogicstorageacct --resource-group myResourceGroup --location westeurope --sku Standard_LRS --kind StorageV2
az storage container create --name email-attachments --account-name mylogicstorageacct
Depois de criar, guarde a connection string ou a chave da conta com segurança (Key Vault é recomendado). Configure o access level do container para Private e considere adicionar uma policy de lifecycle para mover blobs com mais de 90 dias para Cool/Archive.
Passo 2: Criar a Logic App (Consumption) no Azure Portal
No Portal crie uma Logic App (Consumption) — é simples e económico para workflows event-driven. Dê-lhe um nome e associe-a ao Resource Group e localização. A opção Consumption factura por ação e por execução, sendo adequada para padrões de ingestão moderados (centenas a poucos milhares de runs por dia). Para cargas muito elevadas (milhares por minuto) considere Logic Apps (Standard).
Escolha o plano consoante a latência e o throughput desejado: Consumption é near‑real time para conectores como Office 365 Outlook e é suficiente para a maioria dos cenários de ingestão.
Passo 3: Configurar o trigger Office 365 Outlook - When a new email arrives
No designer da Logic App adicione o trigger "When a new email arrives (V3)" do conector Office 365 Outlook. Autentique com a conta Office 365. Configure filtros para evitar ruído — por exemplo apenas e-mails com anexos, Subject contém "Invoice" ou From contém "@fornecedor.com". Isto reduz o número de runs e custos. O conector faz um trigger do tipo push, por isso a latência é normalmente inferior a um minuto.
Trigger: When a new email arrives (V3)
- Folder: Inbox
- Has Attachments: Yes
- Include Attachments: Yes
- Filter: Subject contains "Invoice" (opcional)
Se precisa de processar apenas tipos específicos de ficheiros, pode filtrar por Content-Type ou nome do anexo posteriormente dentro do fluxo.
Passo 4: Iterar anexos e criar ficheiros no Blob Storage
Adicione uma ação "Apply to each" sobre a saída Attachments do trigger. Dentro do loop utilize a ação do conector Azure Blob Storage "Create blob" para gravar cada anexo. Para autenticar escolha a Storage Account criada (via connection string ou Managed Identity, se configurada).
# Campos importantes na ação Create blob
- Folder Path / Container: email-attachments
- Blob Name: @{concat(formatDateTime(utcNow(),'yyyyMMddHHmmss'),'-',replace(items('Apply_to_each')?['name'],' ','_'))}
- Blob Content: @{base64ToBinary(items('Apply_to_each')?['contentBytes'])}
Usar timestamp no nome reduz duplicados e ajuda a ordenar os ficheiros. Para garantir nomes válidos substitua espaços e caracteres inválidos (ex.: replace(...)). Verifique o tamanho máximo dos anexos suportado pelo conector; em geral mensagens com anexos até ~150 MB podem ser processadas mas depende da configuração do Exchange/tenant.
Passo 5: Tratar erros e evitar duplicados
Adicione uma condição para verificar se o ficheiro já existe antes de criar — por exemplo usando a ação "Get blob metadata" ou "List blobs" para procurar um nome igual. Em alternativa, use um esquema de nomes com timestamp e um identificador único (MessageId).
Para gerir erros, use a funcionalidade "Configure run after" para que, em caso de falha ou timeout, seja executada uma ação de recovery: enviar um e-mail para o admin, escrever um registo numa Table Storage ou criar um item numa Queue para reprocessamento. Isto facilita a monitorização e reduz perdas de ficheiros.
# Exemplo de BlobName com timestamp e MessageId
@{concat(formatDateTime(utcNow(),'yyyyMMddHHmmss'),'-',triggerOutputs()?['body/messageId'],'-',items('Apply_to_each')?['name'])}
Considere também adicionar um passo de validação (ex.: verificar mime-type e tamanho) e uma policy de lifecycle no Storage (ex.: delete after 180 days) para controlar custos.
Verificar o resultado
Para confirmar que ficou bem, envie um e-mail de teste com 2-3 anexos variados para a conta monitorizada. No Portal, abra a Logic App, veja o histórico de runs (Run history) e expanda uma execução para inspecionar inputs/outputs de cada ação. Deve ver a lista de anexos, a criação de cada blob e códigos de sucesso (200/201).
Verifique também no container email-attachments que os blobs foram criados com o conteúdo correto (confirme tamanho e tipo). Se algo falhar, os detalhes do erro aparecem no run history com a mensagem do conector — isso ajuda a ajustar limites de timeout e retry.
Conclusão
Agora tem uma Azure Logic App que automatiza a ingestão de anexos de e-mail para Azure Blob Storage — útil para pipelines ETL, backups ou processamento posterior por Functions ou Data Factory. Próximos passos práticos: filtrar por tipo MIME, adicionar validação/antivírus, usar Managed Identity para autenticação segura, ou ligar a uma Azure Function para processamento (por exemplo, conversão CSV→Parquet). Dica: use nomes de blob com metadados, configure políticas de lifecycle (ex.: mover para Cool após 30 dias) e monitorize o custo das execuções para optimizar o processo.