자습서: Azure Logic Apps, Azure Functions 및 Azure Storage를 사용하여 메일을 처리하는 워크플로 만들기

적용 대상: Azure Logic Apps(소비)

Azure Logic Apps를 사용하면 워크플로를 자동화하고 Azure 서비스, Microsoft 서비스, 기타 SaaS(software-as-a-service) 앱 및 온-프레미스 시스템의 데이터를 통합할 수 있습니다. 이 자습서에서는 들어오는 메일 및 첨부 파일을 처리하고, Azure Functions를 사용하여 메일 콘텐츠를 분석하고, 콘텐츠를 Azure Storage에 저장하고, 콘텐츠를 검토하기 위해 메일을 보내는 논리 앱 워크플로를 빌드하는 방법을 보여 줍니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 저장된 이메일 및 첨부 파일을 확인할 수 있도록 Azure 스토리지 및 Storage Explorer를 설정합니다.
  • 이메일에서 HTML을 제거하는 Azure 함수를 만듭니다. 이 자습서에는 이 함수에 사용할 수 있는 코드가 포함되어 있습니다.
  • 빈 사용량 논리 앱 워크플로 만들기
  • 이메일의 첨부 파일을 모니터링하는 트리거를 추가합니다.
  • 이메일에 첨부 파일이 있는지 확인하는 조건을 추가합니다.
  • 이메일에 첨부 파일이 있으면 Azure 함수를 호출하는 작업을 추가합니다.
  • 이메일 및 첨부 파일에 대한 스토리지 BLOB을 만드는 작업을 추가합니다.
  • 이메일 알림을 보내는 작업을 추가합니다.

다음 스크린샷은 개괄적인 워크플로를 보여 줍니다.

이 자습서의 개괄적인 소비 워크플로 예제를 보여 주는 스크린샷.

필수 조건

첨부 파일을 저장하도록 스토리지 설정

수신 이메일 및 첨부 파일을 Azure Storage 컨테이너에 BLOB으로 저장할 수 있습니다.

  1. 스토리지 계정이 이미 있는 경우가 아니면 Azure 계정 자격 증명이 있는 Azure Portal기본 사항 탭에서 다음 정보를 사용하여 스토리지 계정을 만듭니다.

    속성 Description
    구독 <Azure-subscription-name> Azure 구독의 이름
    리소스 그룹 <Azure-resource-group> 관련 리소스를 구성하고 관리하는 데 사용되는 Azure 리소스 그룹의 이름. 이 예제에서는 LA-Tutorial-RG를 사용합니다.

    참고: 리소스 그룹은 특정 지역 내에 있습니다. 일부 지역에서 이 자습서의 항목을 사용할 수 없을 수도 있지만, 가능하면 동일한 지역을 사용해 보세요.
    스토리지 계정 이름 <Azure-storage-account-name> 스토리지 계정 이름은 3-24자여야 하고 소문자와 숫자만 포함할 수 있습니다. 이 예제에서는 attachmentstorageacct를 사용합니다.
    지역 <Azure-region> 스토리지 계정에 대한 정보를 저장할 지역입니다. 이 예제에서는 미국 서부를 사용합니다.
    성능 Standard 이 설정은 지원되는 데이터 형식 및 데이터를 저장하기 위한 미디어를 지정합니다. 스토리지 계정 유형을 참조하세요.
    중복 GRS(지역 중복 스토리지) 이 설정을 사용하면 계획된 이벤트 및 계획되지 않은 이벤트로부터 보호하기 위해 데이터의 여러 복사본을 저장할 수 있습니다. 자세한 내용은 Azure Storage 중복성을 참조하세요.

    스토리지 계정을 만들려면 Azure PowerShell 또는 Azure CLI를 사용할 수도 있습니다.

  2. 완료되면 검토>만들기를 선택합니다.

  3. Azure가 스토리지 계정을 배포한 후에는 스토리지 계정을 찾아 스토리지 계정의 액세스 키를 가져옵니다.

    1. 스토리지 계정의 보안 + 네트워킹에서 액세스 키를 선택합니다.

    2. 스토리지 계정 이름과 key1을 복사한 다음, 이러한 값을 안전한 곳에 저장합니다.

    스토리지 계정의 액세스 키를 가져오려면 Azure PowerShell 또는 Azure CLI를 사용할 수도 있습니다.

  4. 이메일 첨부 파일에 대한 Blob Storage 컨테이너를 만듭니다.

    1. 스토리지 계정 메뉴의 데이터 스토리지에서 컨테이너를 선택합니다.

    2. 컨테이너 페이지의 도구 모음에서 컨테이너를 선택합니다.

    3. 새 컨테이너 아래에서 컨테이너 이름으로 attachments를 입력합니다. 퍼블릭 액세스 수준에서 컨테이너(컨테이너와 Blob에 대한 익명 읽기 권한)>확인을 선택합니다.

    완료되면 컨테이너 목록에 새 스토리지 컨테이너가 표시됩니다.

    스토리지 컨테이너를 만들려면 Azure PowerShell 또는 Azure CLI를 사용할 수도 있습니다.

다음으로, Storage Explorer를 스토리지 계정에 연결합니다.

Storage Explorer 설정

이제 Storage Explorer를 스토리지 계정에 연결하여 워크플로에서 첨부 파일을 Blob으로 스토리지 컨테이너에 올바르게 저장하는지 확인할 수 있습니다.

  1. Microsoft Azure Storage Explorer를 시작합니다. Azure 계정으로 로그인합니다.

    참고 항목

    프롬프트가 표시되지 않으면 Storage Explorer 작업 표시줄에서 계정 관리(계정 아이콘)를 선택합니다.

  2. Azure 환경 선택 창에서 Azure 환경을 선택하고 다음을 선택합니다.

    이 예에서는 전역 다중 테넌트 Azure를 선택하여 계속됩니다.

  3. 나타나는 브라우저 창에서 Azure 계정에 로그인합니다.

  4. Storage Explorer 및 계정 관리 창으로 돌아가서 올바른 Microsoft Entra 테넌트 및 구독을 선택했는지 검사합니다.

  5. Storage Explorer 작업 표시줄에서 연결 대화 상자 열기를 선택합니다.

  6. 리소스 선택 창에서 스토리지 계정 또는 서비스를 선택합니다.

  7. 연결 방법 선택 창에서 계정 이름 및 키>다음을 선택합니다.

  8. Azure Storage에 연결 창에서 다음 정보를 제공하고 다음을 선택합니다.

    속성
    표시 이름 연결에 대한 식별 이름
    계정 이름 스토리지 계정 이름
    계정 키 이전에 저장한 액세스 키
  9. 요약 창에서 연결 정보를 확인한 다음, 연결을 선택합니다.

    Storage Explorer에서 연결이 생성되고, 탐색기 창의 에뮬레이터 및 연결됨>스토리지 계정 아래에 스토리지 계정이 표시됩니다.

  10. 스토리지 계정에서 Blob Storage 컨테이너를 찾으려면 스토리지 계정(여기서는 attachmentstorageacct), Blob 컨테이너(attachments 컨테이너가 있음)를 차례로 확장합니다. 예를 들면 다음과 같습니다.

    Storage Explorer - 스토리지 컨테이너 찾기를 보여 주는 스크린샷.

다음으로, 수신 이메일에서 HTML을 제거하는 Azure 함수를 만듭니다.

HTML을 제거하는 함수 만들기

이제 다음 단계에서 제공하는 코드 조각을 사용하여 수신 이메일에서 HTML을 제거하는 Azure 함수를 만듭니다. 이렇게 하면 이메일 콘텐츠를 좀 더 깨끗하게 정리하고 보다 쉽게 처리할 수 있습니다. 그런 후 워크플로에서 이 함수를 호출할 수 있습니다.

  1. 함수를 만들려면 먼저 다음 단계에 따라 함수 앱을 만듭니다.

    1. 기본 탭에서 다음 정보를 제공합니다.

      속성 Description
      구독 <your-Azure-subscription-name> 이전에 사용한 동일한 Azure 구독
      리소스 그룹 LA-Tutorial-RG 이전에 사용한 동일한 Azure 리소스 그룹
      함수 앱 이름 <function-app-name> 함수 앱의 이름은 Azure에서 전역적으로 고유해야 합니다. 이 예에서는 CleanTextFunctionApp을 이미 사용하고 있으므로 다른 이름을 입력합니다(예: MyCleanTextFunctionApp-<your-name>).
      코드 또는 컨테이너 이미지를 배포하려고 하나요? 코드 코드 파일을 게시합니다.
      런타임 스택 <preferred-language> 자주 사용하는 함수 프로그래밍 언어를 지원하는 런타임을 선택합니다. 포털 내 편집은 JavaScript, PowerShell, TypeScript 및 C# 스크립트에만 사용할 수 있습니다. C# 클래스 라이브러리, Java 및 Python 함수는 로컬로 개발해야 합니다. C# 및 F# 함수의 경우 .NET을 선택합니다.
      버전 <version-number> 설치된 런타임의 버전을 선택합니다.
      지역 <Azure-region> 이전에 사용한 동일한 지역 이 예제에서는 미국 서부를 사용합니다.
      운영 체제 <your-operating-system> 운영 체제는 런타임 스택 선택에 따라 미리 선택되지만 즐겨 사용하는 함수 프로그래밍 언어를 지원하는 운영 체제를 선택할 수 있습니다. 포털 내 편집은 Windows에서만 지원됩니다. 이 예제에서는 Windows를 선택합니다.
      호스팅 옵션 및 계획 ‘사용량(서버리스)’ 함수 앱에 리소스가 할당되는 방법을 정의하는 호스팅 플랜을 선택합니다. 기본 소비 플랜에서 함수의 필요에 따라 리소스가 동적으로 추가됩니다. 이 서버리스 호스팅에서는 함수가 실행되는 시간 만큼만 요금을 지불하면 됩니다. App Service 계획에서 실행하는 경우 함수 앱의 크기 조정을 관리해야 합니다.
    2. 다음: 스토리지를 선택합니다. 스토리지 탭에서 다음 정보를 제공합니다.

      속성 설명
      스토리지 계정 cleantextfunctionstorageacct 함수 앱에서 사용하는 스토리지 계정을 만듭니다. 스토리지 계정 이름은 3~24자 사이여야 하고 소문자 및 숫자만 포함할 수 있습니다.

      참고: 이 스토리지 계정은 함수 앱을 포함하며, 이전에 메일 첨부 파일용으로 만든 스토리지 계정과 다릅니다. 기존 계정을 사용할 수도 있습니다. 여기서는 스토리지 계정 요구 사항을 충족해야 합니다.
    3. 완료되면 검토 + 만들기를 선택합니다. 정보를 확인하고 만들기를 선택합니다.

    4. Azure가 함수 앱 리소스를 만들고 배포한 후 리소스로 이동을 선택합니다.

  2. 이제 Azure Portal에서 함수 만들기가 제한되므로 로컬에서 함수를 만듭니다. HTTP 트리거 템플릿을 사용하고, 함수에 대한 다음 정보를 제공하고, HTML을 제거하고 호출자에게 결과를 반환하는 포함된 샘플 코드를 사용합니다.

    속성
    함수 이름 RemoveHTMLFunction 함수를 선택합니다.
    권한 부여 수준 Function
    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    using System.Text.RegularExpressions;
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log) 
    {
       log.LogInformation("HttpWebhook triggered");
    
       // Parse query parameter
       string emailBodyContent = await new StreamReader(req.Body).ReadToEndAsync();
    
       // Replace HTML with other characters
       string updatedBody = Regex.Replace(emailBodyContent, "<.*?>", string.Empty);
       updatedBody = updatedBody.Replace("\\r\\n", " ");
       updatedBody = updatedBody.Replace(@"&nbsp;", " ");
    
       // Return cleaned text
       return (ActionResult)new OkObjectResult(new { updatedBody });
    }
    
  3. 함수를 테스트하려면 다음 샘플 입력을 사용할 수 있습니다.

    {"name": "<p><p>Testing my function</br></p></p>"}

    함수의 출력은 다음 결과와 같습니다.

    {"updatedBody":"{\"name\": \"Testing my function\"}"}
    

함수가 작동하는지 확인한 후 논리 앱 리소스 및 워크플로를 만듭니다. 이 자습서에서는 메일에서 HTML을 제거하는 함수를 만드는 방법을 보여 주지만, Azure Logic Apps는 HTML-Text 커넥터도 제공합니다.

논리 앱 워크플로 만들기

  1. Azure Portal의 최상위 검색 상자에 논리 앱을 입력하고 논리 앱을 선택합니다.

  2. Logic Apps 페이지에서 추가를 선택합니다.

  3. 논리 앱 만들기 페이지의 플랜에서 사용량을 플랜 유형으로 선택합니다. 그러면 사용량 논리 앱 워크플로에 대한 옵션만 표시됩니다. 다음 정보를 제공하고 검토 + 만들기를 선택합니다.

    속성 Description
    구독 <your-Azure-subscription-name> 이전에 사용한 동일한 Azure 구독
    리소스 그룹 LA-Tutorial-RG 이전에 사용한 동일한 Azure 리소스 그룹
    논리 앱 이름 LA-ProcessAttachment 논리 앱 및 워크플로의 이름. 사용량 논리 앱과 워크플로의 이름은 항상 동일합니다.
    지역 미국 서부 이전에 사용한 동일한 지역
    로그 분석 사용 문제 이 자습서에서는 꺼짐 설정을 유지합니다.
  4. 제공한 정보를 확인하고 만들기를 선택합니다. Azure가 앱을 배포한 후 리소스로 이동을 선택합니다.

  5. 논리 앱 리소스 메뉴에서 논리 앱 디자이너를 선택하여 워크플로 디자이너를 엽니다.

들어오는 메일을 검사하는 트리거 추가

이제 첨부 파일이 있는 수신 이메일을 확인하는 트리거를 추가합니다. 모든 워크플로는 트리거 조건이 충족되면(예: 특정 이벤트가 발생하거나 새 데이터가 있을 때) 발생하는 트리거로 시작해야 합니다. 자세한 내용은 빠른 시작: 다중 테넌트 Azure Logic Apps에서 사용량 논리 앱 워크플로 예제 만들기를 참조하세요.

이 예제에서는 Microsoft 회사 또는 학교 계정으로 로그인해야 하는 Office 365 Outlook 커넥터를 사용합니다. 개인 Microsoft 계정을 사용하는 경우 Outlook.com 커넥터를 사용합니다.

  1. 워크플로 디자이너에서 트리거 추가를 선택합니다.

  2. 트리거 추가 창이 열리면 검색 상자에 office 365 outlook을 입력합니다. 트리거 결과 목록의 Office 365 Outlook에서 새 이메일이 도착할 때(V3)를 선택합니다.

  3. 자격 증명을 요청하는 경우 이메일 계정에 로그인하면 워크플로와 이메일 계정이 연결됩니다.

  4. 이제 새 메일을 확인하고 워크플로를 실행하기 위한 트리거 조건을 제공합니다.

    속성 설명
    중요도 모두 원하는 이메일의 중요도 수준을 지정합니다.
    첨부 파일에만 첨부 파일이 있는 이메일만 받습니다.

    참고: 이 트리거는 계정에서 이메일을 제거하지는 않으며, 새 메시지만 확인하여 제목 필터와 일치하는 이메일만 처리합니다.
    첨부 파일 포함 첨부 파일을 확인하는 데서 그치지 않고 첨부 파일을 워크플로의 입력으로 가져옵니다.
    폴더 받은 편지함 확인할 이메일 폴더
  5. 고급 매개 변수 목록에서 제목 필터를 선택합니다.

  6. 제목 필터 상자가 작업에 나타나면 여기에 설명된 대로 제목을 지정합니다.

    속성 설명
    제목 필터 비즈니스 분석가 2 #423501 이메일 제목에서 찾을 텍스트
  7. 워크플로를 저장합니다. 디자이너 도구 모음에서 저장을 선택합니다.

    이제 논리 앱 워크플로가 라이브 상태지만 메일 확인 외에는 아무 것도 수행하지 않습니다. 다음으로, 워크플로의 후속 작업을 계속하는 조건을 지정하는 조건을 추가합니다.

첨부 파일 확인

이제 첨부 파일이 있는 이메일만 선택하는 조건을 추가합니다.

  1. 트리거 아래에서 더하기 기호(+)를 선택한 다음 작업 추가를 선택합니다.

  2. 작업 추가 창의 검색 상자에 조건을 입력합니다.

  3. 작업 결과 목록에서 조건이라는 작업을 선택합니다.

  4. 보다 구체적인 설명을 사용하여 조건 이름을 바꿉니다.

    1. 조건 정보 창에서 조건의 기본 이름을 다음 설명으로 바꿉니다. 이메일에 첨부 파일과 주요 제목 구가 있는 경우
  5. 첨부 파일이 있는 이메일을 확인하는 조건을 만듭니다.

    1. And 연산 목록 아래의 첫 번째 행에서 맨 왼쪽 상자 내부를 선택합니다. 표시되는 동적 콘텐츠 목록에서 첨부 파일 있음 속성을 선택합니다.

      조건 작업, 커서가 맨 왼쪽 상자에 있는 두 번째 행, 열린 동적 콘텐츠 목록 및 첨부 파일 있음 속성이 선택된 스크린샷.

    2. 중간 상자에서 이(가) 다음과 같은 경우 연산자를 유지합니다.

    3. 맨 오른쪽 상자에서 트리거의 첨부 파일 있음 속성 값과 비교할 값으로 True를 입력합니다. 두 값이 같으면 이메일에 첨부 파일이 하나 이상 있는 것이며, 조건을 통과하고, 워크플로가 계속됩니다.

      완료 조건을 보여 주는 스크린샷.

    디자이너에서 코드 보기를 선택하여 표시할 수 있는 기본 워크플로 정의에서 조건은 다음 예제와 유사하게 나타납니다.

    "Condition": {
       "actions": { <actions-to-run-when-condition-passes> },
       "expression": {
          "and": [ {
             "equals": [
                "@triggerBody()?['HasAttachment']",
                  "true"
             ]
          } ]
       },
       "runAfter": {},
       "type": "If"
    }
    
  6. 워크플로를 저장합니다.

조건 테스트

  1. 디자이너 도구 모음에서 트리거 실행>실행을 선택합니다.

    이 단계는 워크플로를 수동으로 시작하고 실행하지만 테스트 메일이 받은 편지함에 도착할 때까지 아무 일도 일어나지 않습니다.

  2. 다음 기준을 충족하는 메일을 자신에게 보냅니다.

    • 트리거의 제목 필터에서 지정한 텍스트(Business Analyst 2 #423501)가 이메일의 제목에 포함되어 있습니다.

    • 이메일에 첨부 파일이 하나 있습니다. 이제 빈 텍스트 파일을 하나 만들고 해당 파일을 이메일에 첨부합니다.

    메일이 도착하면 워크플로에서는 첨부 파일 및 지정된 제목 텍스트를 확인합니다. 조건이 통과하면 트리거가 실행되고 Azure Logic Apps가 워크플로를 인스턴스화하고 워크플로 인스턴스를 실행합니다.

  3. 트리거가 실행되고 워크플로가 성공적으로 실행되었는지 확인하려면 논리 앱 메뉴에서 개요를 선택합니다.

    • 성공적으로 실행된 트리거를 보려면 트리거 기록을 선택합니다.

    • 성공적으로 실행된 워크플로를 보려면 실행 기록을 선택합니다.

    트리거가 실행되지 않았거나 성공적인 트리거에도 불구하고 워크플로가 실행되지 않은 경우 논리 앱 워크플로 문제 해결을 참조하세요.

다음으로, True 분기에 대해 수행할 작업을 정의합니다. 첨부 파일과 함께 이메일을 저장하려면 이메일 본문에서 HTML을 제거한 후 이메일 및 첨부 파일용 스토리지 컨테이너에 BLOB을 만듭니다.

참고 항목

워크플로는 False 분기를 비워 두고 메일에 첨부 파일이 없는 경우 아무 작업도 수행하지 않을 수 있습니다. 이 자습서를 마친 후 추가 연습으로 False인 경우 분기에 대해 수행할 적절한 작업을 추가할 수 있습니다.

RemoveHTMLFunction 호출

이 단계에서는 이전에 만든 Azure 함수를 워크플로에 추가하고, 메일 트리거의 메일 본문 내용을 이 함수로 전달합니다.

  1. 논리 앱 메뉴에서 논리 앱 디자이너를 선택합니다. True 분기에서 작업 추가를 선택합니다.

  2. 작업 선택 검색 상자에서 기본 제공을 선택합니다. 검색 상자에 azure Functions를 입력하고 Azure 함수 선택 작업을 선택합니다.

    Azure 함수 선택이라는 선택된 작업을 보여 주는 스크린샷.

  3. 이전에 만든 함수 앱(이 예에서는 CleanTextFunctionApp)을 선택합니다.

  4. 이제 이 예제에서 RemoveHTMLFunction이라는 함수를 선택합니다.

  5. RemoveHTMLFunction을 호출하여 메일 본문 정리 설명으로 함수 셰이프 이름을 바꿉니다.

  6. 이제 함수에서 처리할 입력을 지정합니다.

    1. 요청 본문 아래에서 후행 공백이 있는 다음 텍스트를 입력합니다.

      { "emailBody":

      다음 단계에서 이 입력을 처리하는 동안 입력이 JSON 형식으로 올바르게 지정될 때까지 잘못된 JSON에 대한 오류가 표시됩니다. 앞에서 이 함수를 테스트할 때 이 함수에 지정된 입력에서 JSON(JavaScript Object Notation)을 사용했습니다. 따라서 요청 본문에서도 동일한 형식을 사용해야 합니다.

      또한 커서가 요청 본문 상자 안에 있으면 이전 작업에서 사용할 수 있는 속성 값을 선택할 수 있도록 동적 콘텐츠 목록이 표시됩니다.

    2. 동적 콘텐츠 목록의 새 이메일이 도착하는 경우 아래에서 본문 속성을 선택합니다. 이 속성 뒤에는 닫는 중괄호(})를 추가해야 합니다.

      함수로 전달할 요청 본문 지정

    완료되면 함수에 대한 입력이 다음 예제와 같습니다.

    함수에 전달할 요청 본문을 완성함

  7. 워크플로를 저장합니다.

다음으로, 이메일 본문을 저장할 수 있도록 스토리지 컨테이너에 Blob을 만드는 작업을 추가합니다.

이메일 본문용 BLOB 만들기

  1. 디자이너의 True 블록에 있는 Azure 함수 아래에서 작업 추가를 선택합니다.

  2. 작업 선택 검색 상자에서 모두를 선택합니다. 검색 상자에 Blob 만들기를 입력하고 Blob 만들기라는 작업을 선택합니다.

    Blob 만들기가 선택된 Azure Blob Storage 작업을 보여 주는 스크린샷.

  3. 스토리지 계정에 대한 연결 정보를 제공하고 만들기를 선택합니다. 예를 들면 다음과 같습니다.

    속성 Description
    연결 이름 AttachmentStorageConnection 연결에 대해 설명하는 이름
    인증 유형 액세스 키 연결에 사용할 인증 유형
    Azure Storage 계정 이름 또는 엔드포인트 <storage-account-name> 이전에 만든 스토리지 계정의 이름(이 예제에서 attachmentstorageacct)
    Azure Storage 계정 액세스 키 <storage-account-access-key> 이전에 만든 스토리지 계정의 액세스 키
  4. 메일 본문에 대한 Blob 만들기 설명으로 Blob 만들기 작업의 이름을 바꿉니다.

  5. Blob 만들기 작업에서 다음 정보를 제공합니다.

    속성 설명
    스토리지 계정 이름 또는 Blob 엔드포인트 연결 설정 사용(<storage-account-name>) 스토리지 계정(이 예제에서는 attachmentstorageacct)을 선택합니다.
    폴더 경로 <path-and-container-name> 앞에서 만든 컨테이너의 경로 및 이름입니다. 이 예제에서는 폴더 아이콘을 선택한 다음, attachments 컨테이너를 선택합니다.
    Blob 이름 <sender-name> 이 예제에서는 보낸 사람의 이름을 Blob의 이름으로 사용합니다. 동적 콘텐츠 목록을 표시하도록 이 상자 내부를 클릭합니다. 새 메일이 도착하는 경우 섹션에서 보낸 사람 필드를 선택합니다.
    BLOB 콘텐츠 <content-for-blob> 이 예제에서는 HTML이 없는 이메일 본문을 Blob 콘텐츠로 사용합니다. 동적 콘텐츠 목록을 표시하도록 이 상자 내부를 클릭합니다. RemoveHTMLFunction을 호출하여 메일 본문 정리 섹션에서 본문을 선택합니다.

    다음 이미지는 Blob 만들기 작업에 대해 선택할 필드를 보여 줍니다.

    Blob 만들기 작업의 HTML 없는 메일 본문에 대한 정보를 보여 주는 스크린샷.

    완료되면 작업은 다음 예제와 유사합니다.

    완료된 Blob 만들기 작업에 대한 HTML 없는 메일 입력 예제를 보여 주는 스크린샷.

  6. 워크플로를 저장합니다.

첨부 파일 처리 확인

  1. 디자이너 도구 모음에서 트리거 실행>실행을 선택합니다.

    이 단계는 워크플로를 수동으로 시작하고 실행하지만 테스트 메일이 받은 편지함에 도착할 때까지 아무 일도 일어나지 않습니다.

  2. 다음 기준을 충족하는 메일을 자신에게 보냅니다.

    • 트리거의 제목 필터에서 지정한 텍스트(Business Analyst 2 #423501)가 이메일의 제목에 포함되어 있습니다.

    • 이메일에 첨부 파일이 하나 이상 있습니다. 이제 빈 텍스트 파일을 하나 만들고 해당 파일을 이메일에 첨부합니다.

    • 이메일 본문에 테스트 콘텐츠가 포함되어 있으며 예를 들면 다음과 같습니다. Testing my logic app workflow

    트리거가 성공적으로 실행되었지만 워크플로가 트리거되지 않았거나 실행되지 않은 경우 논리 앱 워크플로 문제 해결을 참조하세요.

  3. 워크플로가 메일을 올바른 스토리지 컨테이너에 저장했는지 확인합니다.

    1. Storage Explorer에서 에뮬레이터 및 연결됨>스토리지 계정>attachmentstorageacct(키)>Blob 컨테이너>첨부 파일을 확장합니다.

    2. 이메일의 첨부 파일 컨테이너를 선택합니다.

      아직 워크플로에서 처리한 첨부 파일이 없기 때문에 지금은 컨테이너에 메일만 표시됩니다.

      저장된 메일만 있는 Storage Explorer를 보여 주는 스크린샷.

    3. 작업을 마쳤으면 Storage Explorer에서 이메일을 삭제합니다.

  4. 필요에 따라 False인 분기(지금은 아무 작업도 수행하지 않음)를 테스트하려면 조건을 만족하지 않는 메일을 보내면 됩니다.

다음으로, 모든 메일 첨부 파일을 처리할 For each 루프를 추가합니다.

첨부 파일 처리

메일의 각 첨부 파일을 처리하려면 워크플로에 For each 루프를 추가합니다.

  1. 디자이너로 돌아갑니다. 메일 본문용 Blob 만들기 작업 아래에서 작업 추가를 선택합니다.

  2. 작업 선택 검색 상자에서 기본 제공을 선택합니다. 검색 상자에 for each를 입력하고 For each라는 작업을 선택합니다.

    For each라는 선택한 작업을 보여 주는 스크린샷.

  3. For each 메일 첨부 파일 설명으로 루프 이름을 바꿉니다.

  4. 이제 루프에서 처리할 데이터를 선택합니다. For each 메일 첨부 파일 루프에서 동적 콘텐츠 목록이 표시되도록 이전 단계에서 출력 선택 상자 내에서 선택합니다. 새 메일이 도착하는 경우 섹션에서 첨부 파일을 선택합니다.

    선택한 필드의 이름이 첨부 파일인 동적 콘텐츠 목록을 보여 주는 스크린샷.

    첨부 파일 필드는 이메일에 포함된 모든 첨부 파일이 있는 배열을 전달합니다. For each 루프는 배열을 통해 전달되는 항목마다 작업을 반복합니다.

  5. 워크플로를 저장합니다.

다음으로, 각 첨부 파일을 첨부 파일 스토리지 컨테이너에 BLOB으로 저장하는 작업을 추가합니다.

For each 첨부 파일용 Blob 만들기

  1. 검색된 각 첨부 파일에서 수행할 작업을 지정할 수 있도록 디자이너의 For each 메일 첨부 파일 루프에서 작업 추가를 선택합니다.

    작업 추가가 선택된 루프를 보여 주는 스크린샷.

  2. 작업 선택 검색 상자에서 모두를 선택합니다. 검색 상자에 Blob 만들기를 입력하고 Blob 만들기라는 작업을 선택합니다.

    Blob 만들기라는 선택한 작업을 보여 주는 스크린샷.

  3. blob for each 메일 첨부 파일 만들기 설명으로 Blob 2 만들기 작업의 이름을 바꿉니다.

  4. blob for each 메일 첨부 파일 만들기 작업에서 다음 정보를 제공합니다.

    속성 설명
    스토리지 계정 이름 또는 Blob 엔드포인트 연결 설정 사용(<storage-account-name>) 스토리지 계정(이 예제에서는 attachmentstorageacct)을 선택합니다.
    폴더 경로 <path-and-container-name> 앞에서 만든 컨테이너의 경로 및 이름입니다. 이 예제에서는 폴더 아이콘을 선택한 다음, attachments 컨테이너를 선택합니다.
    Blob 이름 <attachment-name> 이 예제에서는 첨부 파일의 이름을 Blob의 이름으로 사용합니다. 동적 콘텐츠 목록을 표시하도록 이 상자 내부를 클릭합니다. 새 메일이 도착하는 경우 섹션에서 이름 필드를 선택합니다.
    BLOB 콘텐츠 <email-content> 이 예제에서는 메일 콘텐츠를 Blob 콘텐츠로 사용합니다. 동적 콘텐츠 목록을 표시하도록 이 상자 내부를 클릭합니다. 새 메일이 도착하는 경우 섹션에서 콘텐츠를 선택합니다.

    Blob 만들기 작업의 첨부 파일에 대한 정보를 보여 주는 스크린샷.

    완료되면 작업은 다음 예제와 유사합니다.

    완료된 Blob 만들기 작업에 대한 예제 첨부 파일 정보를 보여 주는 스크린샷.

  5. 워크플로를 저장합니다.

첨부 파일 처리 확인

  1. 디자이너 도구 모음에서 트리거 실행>실행을 선택합니다.

    이 단계는 워크플로를 수동으로 시작하고 실행하지만 테스트 메일이 받은 편지함에 도착할 때까지 아무 일도 일어나지 않습니다.

  2. 다음 기준을 충족하는 메일을 자신에게 보냅니다.

    • 트리거의 제목 필터 속성에서 지정한 텍스트(Business Analyst 2 #423501)가 이메일 제목에 포함되어 있습니다.

    • 이메일에 첨부 파일이 두 개 이상 있습니다. 이제 빈 텍스트 파일을 두 개 만들고 해당 파일을 이메일에 첨부합니다.

    트리거가 성공적으로 실행되었지만 워크플로가 트리거되지 않았거나 실행되지 않은 경우 논리 앱 워크플로 문제 해결을 참조하세요.

  3. 워크플로가 메일과 첨부 파일을 올바른 스토리지 컨테이너에 저장했는지 확인합니다.

    1. Storage Explorer에서 에뮬레이터 및 연결됨>스토리지 계정>attachmentstorageacct(키)>Blob 컨테이너>첨부 파일을 확장합니다.

    2. 이메일 및 첨부 파일용 첨부 파일 컨테이너를 확인합니다.

      Storage Explorer 및 저장된 메일 및 첨부 파일을 보여 주는 스크린샷.

    3. 작업을 마쳤으면 Storage Explorer에서 이메일 및 첨부 파일을 삭제합니다.

다음으로, 워크플로에서 첨부 파일을 검토하라는 메일을 보낼 수 있도록 작업을 추가합니다.

이메일 알림 보내기

  1. 디자이너로 돌아갑니다. True 분기에서 For each 메일 첨부 파일 루프를 축소합니다.

  2. 루프 아래에서 작업 추가를 선택합니다.

    각 루프의 축소된 모습을 보여 주는 스크린샷. 루프 아래에서 작업 추가 옵션이 선택됩니다.

  3. 작업 선택 검색 상자에서 표준을 선택합니다. 검색 상자에서 이메일 보내기를 입력합니다.

  4. 작업 목록에서 메일 공급자에 대한 메일 보내기 작업을 선택합니다. 특정 커넥터에 따라 작업 목록을 필터링하려면 먼저 커넥터를 선택할 수 있습니다.

    이 예제에서는 Azure 회사 또는 학교 계정에서만 작동하는 Office 365 Outlook 커넥터를 계속 사용합니다. Microsoft 개인 계정의 경우 Outlook.com 커넥터를 선택합니다.

    선택된 Office 365 Outlook 메일 보내기 작업을 보여 주는 스크린샷.

  5. 자격 증명을 입력하라는 메시지가 나타나면 Azure Logic Apps가 메일 계정에 대한 연결을 만들 수 있도록 메일 계정에 로그인합니다.

  6. 검토를 위해 메일 보내기 설명으로 메일 보내기 작업의 이름을 바꿉니다.

  7. 다음 작업 정보를 제공하고 메일에 포함할 필드를 선택합니다.

    • 편집 상자에서 빈 줄을 추가하려면 Shift + Enter 키를 누릅니다.
    • 동적 콘텐츠 목록에서 필요한 필드를 찾을 수 없는 경우 새 이메일이 도착하는 경우 옆에 있는 자세히 보기를 선택합니다.
    속성 설명
    받는 사람 <recipient-email-address> 자신의 이메일 주소를 사용하여 테스트할 수 있습니다.
    주제 ASAP - Review applicant for position:주제 포함하려는 이메일 제목입니다. 이 상자 내부를 클릭하고, 예제 텍스트를 입력한 다음, 동적 콘텐츠 목록의 새 이메일이 도착하는 경우 아래에서 제목 필드를 선택합니다.
    본문 Please review new applicant:

    Applicant name:From

    Application file location:Path

    Application email content:본문

    이메일의 본문 콘텐츠입니다. 이 상자 내부를 클릭하고, 예제 텍스트를 입력한 다음, 동적 콘텐츠 목록에서 다음 필드를 선택합니다.

    - 새 이메일이 도착하면
    아래의 보낸 사람 필드 - 이메일 본문에 대한 Blob 만들기
    아래의 경로 필드 - RemoveHTMLFunction 호출로 이메일 본문 정리 아래의 본문 필드

    보낼 샘플 메일을 보여 주는 스크린샷.

    참고 항목

    첨부 파일이 포함된 배열인 콘텐츠 필드와 같은 배열이 있는 필드를 선택하면, 디자이너에서 해당 필드를 참조하는 작업 주위에 For each 루프를 자동으로 추가합니다. 그렇게 하면 워크플로가 각 배열 항목에서 해당 작업을 수행할 수 있습니다. 루프를 제거하려면 배열에 대한 필드를 제거하고, 참조하는 작업을 루프 외부로 이동하고, 루프의 제목 표시줄에서 줄임표(...)를 선택한 후, 삭제를 선택합니다.

  8. 워크플로를 저장합니다.

이제 다음 예제와 같이 워크플로를 테스트합니다.

완료된 워크플로를 보여 주는 스크린샷.

워크플로 실행

  1. 다음 기준을 충족하는 이메일을 자신에게 보냅니다.

    • 트리거의 제목 필터 속성에서 지정한 텍스트(Business Analyst 2 #423501)가 이메일 제목에 포함되어 있습니다.

    • 이메일에 첨부 파일이 하나 이상 있습니다. 이전 단계에서 만든 빈 텍스트 파일을 다시 사용할 수 있습니다. 보다 현실적인 시나리오를 원한다면 이력서 파일을 첨부합니다.

    • 이메일 본문에 다음 텍스트가 있으며, 이 텍스트를 복사하여 붙여넣을 수 있습니다.

      
      Name: Jamal Hartnett
      
      Street address: 12345 Anywhere Road
      
      City: Any Town
      
      State or Country: Any State
      
      Postal code: 00000
      
      Email address: jamhartnett@outlook.com
      
      Phone number: 000-000-0000
      
      Position: Business Analyst 2 #423501
      
      Technical skills: Dynamics CRM, MySQL, Microsoft SQL Server, JavaScript, Perl, Power BI, Tableau, Microsoft Office: Excel, Visio, Word, PowerPoint, SharePoint, and Outlook
      
      Professional skills: Data, process, workflow, statistics, risk analysis, modeling; technical writing, expert communicator and presenter, logical and analytical thinker, team builder, mediator, negotiator, self-starter, self-managing  
      
      Certifications: Six Sigma Green Belt, Lean Project Management
      
      Language skills: English, Mandarin, Spanish
      
      Education: Master of Business Administration
      
  2. 워크플로를 실행합니다. 성공적으로 실행되면 워크플로에서 다음 예제와 비슷한 메일을 보냅니다.

    논리 앱 워크플로에서 보낸 예제 메일을 보여 주는 스크린샷.

    이메일을 받지 못한 경우 이메일의 정크 폴더를 확인합니다. 이메일 정크 필터가 이러한 종류의 메일을 리디렉션할 수 있습니다. 그렇지 않고 워크플로가 올바르게 실행되었는지 확실하지 않으면 논리 앱 워크플로 문제 해결을 참조하세요.

축하드립니다. 여러 Azure 서비스에서 작업을 자동화하고 일부 사용자 지정 코드를 호출하는 워크플로를 만들어서 실행하셨습니다.

리소스 정리

이 샘플이 더 이상 필요 없으면 논리 앱 워크플로 및 관련 리소스가 포함된 리소스 그룹을 삭제합니다.

  1. Azure Portal의 최상위 검색 상자에 리소스 그룹을 입력하고 리소스 그룹을 선택합니다.

  2. 리소스 그룹 목록에서 이 자습서에 대한 리소스 그룹을 선택합니다.

  3. 리소스 그룹의 개요 페이지 도구 모음에서 리소스 그룹 삭제를 선택합니다.

  4. 확인 창이 표시되면 리소스 그룹 이름을 입력하고 삭제를 선택합니다.

다음 단계

이 자습서에서는 Azure Storage 및 Azure Functions 같은 Azure 서비스를 통합하여 메일 첨부 파일을 처리하고 저장하는 논리 앱 워크플로를 만들었습니다. 지금부터는 논리 앱 워크플로를 빌드하는 데 사용할 수 있는 다른 커넥터에 대해서 알아보세요.