자습서: 첨부 파일이 있는 이메일을 Amazon S3로 보내는 방법

25612 단어 nodeawstutorialapi
거의 모든 소프트웨어 제품은 전자메일로 사용자와 의사소통을 한다.많은 경우, 이것은 사무적 알림을 보내는 주요 경로이거나, 사용자가 응용 프로그램에서 하는 행위가 자동으로 터치하는 알림이다.이러한 거래 이메일에는 일반적으로 청구서, 주문 확인 또는 기타 선언과 같은 첨부 파일이 포함됩니다.
개발자는 파일을 생성하거나 검색한 후 many email provider APIs 중 하나를 사용하여 해당 e-메일에 첨부해야 합니다.전자 우편 공급자에 따라 어려운 작업일 수도 있습니다. 이 강좌에서 아마존 SES를 예로 들면, 직접 통합에 의존하면 쉽지 않을 것입니다. 그리고 많은 전자 우편 공급자들에게 문서는 따르기 어려울 것입니다.
Amazon 웹 서비스(AWS)의 두 가지 유행 제품을 어떻게 사용하는지 살펴보자.Amazon S3 스토리지 통에서 파일을 검색한 다음 Amazon Simple Email Service(SES)으로 보낸 e-메일에 첨부하여 템플릿 관리 및 제공을 위해 Courier과 통합합니다.

선결 조건


이 자습서를 완성하려면 다음과 같은 몇 가지 작업이 필요합니다.
  • 은 S3 bucket이 있는 AWS 계정을 만들었습니다.
  • 검증된 SES 도메인
  • 택배계좌-free to sign up, 매달 10000통의 통지가 포함되어 있습니다.
  • Courier를 사용하여 이메일을 만들고 AWS SES를 통해 보내며 AWS S3에 저장된 첨부 파일을 포함합니다.Courier를 사용하면 소스 코드 외부에서 이메일 템플릿을 관리하고 실패한 전송 재시도, 배송 추적 및 사용자 참여와 같은 다른 기능을 활용할 수 있습니다.
    노드가 하나 필요합니다.js v12 + 환경에서 코드를 실행합니다.

    1. Courier에서 전자 메일 알림 만들기


    이메일 공급자로 Amazon SES 구성


    Courier 계정을 만든 후에는 먼저 Amazon SES를 e-메일 공급업체로 구성합니다.이것은 Courier의 API를 사용하여 Amazon SES를 호출하고 곧 작성할 이메일과 첨부 파일을 보낼 수 있도록 합니다.
    먼저 Integrations으로 이동하여 통합 디렉토리에서 AWS SES를 선택합니다.SES 액세스 권한을 가진 IAM 사용자가 제공한 액세스 키 ID와 비밀 액세스 키가 필요합니다.AWS Developer Guide을 사용하여 이러한 정보를 얻는 방법에 대해 자세히 알아보실 수 있습니다.
    다음으로, 우리는 전자 우편을 보내기 위해 발송자의 주소가 필요하다.이것은 사용자가 설정한 필드를 사용하는 모든 전자 우편 주소입니다.마지막으로 SES 계정이 구성된 영역을 선택합니다.설치를 클릭할 수 있습니다. 전자 우편 알림을 만들 준비가 되어 있습니다.

    당신의 전자 우편 통지를 설계하다


    Notification Designer으로 이동하여 알림 생성을 선택합니다."왼쪽 상단에 있는""제목 없는 알림""을 클릭하여 알림에 대한 설명 이름을 제공합니다. 이 예에서는 내 알림을""새 청구서""로 명명합니다."
    이제 이메일을 선택하고 드롭다운 목록에서 AWS SES를 선택하여 알림 채널로 이메일을 추가합니다.이제 왼쪽 채널에서 이메일을 추가하고 알림 설계를 시작할 수 있습니다.

    우리는 간단한 전자 우편 통지를 설계할 것이다.먼저 새 주제를 클릭하고 텍스트를 업데이트하여 주제 행을 "New Invoice"로 업데이트합니다.다음은 도구 모음의 'T' 를 누르면 짧은 인사말을 추가할 텍스트 블록을 사용합니다."안녕하세요{name}, 영수증은 아래에 첨부되어 있습니다."Courier API를 호출하는 데 사용되는 "name"변수를 사용하여 다음 데이터 객체에 알림을 전달합니다.

    이 정도면 충분하지만, 마음대로 더 많은 내용 블록을 추가해서 전자메일을 계속 설계할 수 있다.작업을 마치면 오른쪽 위 모서리에서 변경 내용 게시를 클릭합니다.
    원하는 경우 미리 보기 탭을 사용하여 전자 메일을 미리 보고 변수 템플릿이 올바르게 설정되었는지 확인할 수 있습니다.Create a Test Event을 입력하라는 메시지가 나타나고 데이터 JSON 객체에 name 속성을 추가합니다.테스트 이벤트를 저장하면 미리 보기 옵션 카드에 name 변수가 설정한 값을 채우는 것을 볼 수 있습니다.

    알림 ID 검색


    코드를 작성하기 전에 마지막으로 해야 할 일은 알림 ID를 검색하는 것입니다. 나중에 Courier API를 호출할 때 정확한 알림을 보내는 것입니다.공지 이름 옆에 있는 기어 아이콘을 클릭하여 공지 설정을 시작합니다.다음 코드에서 사용할 수 있도록 공지 ID 값을 복사하고 저장합니다.

    2. 인코딩 전송


    현재 Courier에 알림이 설정되어 있으며 Courier Node.js SDK을 사용하여 알림을 보냅니다.새 npm 프로젝트를 만드는 것부터 시작합니다.
    > mkdir courier-send && cd courier-send
    > npm init --yes
    
    이제 Courier API를 호출하는 데 도움이 되는 몇 개의 패키지를 추가할 수 있습니다.Courier 노드를 설치합니다.환경 변수를 사용할 것이기 때문에,dotenv 패키지를 계속 설치할 것입니다.
    > npm install @trycourier/courier dotenv
    
    인증 처리를 위해 Courier API를 사용합니다.환경 파일.이 파일을 원본 코드 관리에 서명하지 않도록 하십시오.Courier 계정의 Settings > API Keys에서 Courier Auth Token을 찾을 수 있습니다.만들어봅시다.env 파일을 auth 영패로 채웁니다.
    > echo "COURIER_AUTH_TOKEN=YOUR_AUTH_TOKEN" > .env
    
    이제 색인 파일을 만들고 가장 좋아하는 편집기에서 열 수 있습니다.VS Code을 사용하겠습니다.
    > touch index.js && code .
    
    다음 코드를 붙여넣습니다.
    require("dotenv").config();
    const { CourierClient } = require("@trycourier/courier");
    
    const courier = CourierClient();
    
    const main = async () => {
    
    };
    
    main();
    
    이 코드는 우리의 것이다.env 파일 및 인증 토큰을 사용하여 Courier 클라이언트를 만듭니다.이것은 우리가 async/wait를 사용할 수 있도록 비동기 주 함수를 설정했다.지금 택배 추가해서 호출할게요.main 함수에 다음 코드를 추가합니다.
    const { messageId } = await courier.send({
      eventId: "YOUR_NOTIFICATION_ID",
      recipientId: "YOUR_RECIPIENT_ID",
      profile: {
        email: "YOUR_EMAIL"
      }
      data: {
        name: "Aydrian"
      }
    });
      console.log("Sent notification: ", messageId);
    
    이 코드는 이벤트 Id에서 지정한 알림을 지정한 수신자에게 보냅니다.eventId 값을 이전에 복사한 공지 ID로 대체해야 합니다.또한 recipientId을 고유 문자열로 업데이트해야 합니다. 예를 들어 공백이 없는 모든 대문자에 제 이름과 우편번호를 사용합니다: AYDRIAN10036).이메일 주소를 사용하여 email을 업데이트해야 합니다.지금 이것을 실행하면 첨부되지 않은 이메일을 받을 수 있습니다.다음에 우리가 이 문제를 해결합시다.

    전자 메일 첨부 파일 추가


    첨부 파일을 추가하려면 먼저 S3 메모리 통에서 검색하고 베이스 64 문자열로 변환해야 합니다.그리고 공급자 덮어쓰기를 사용하여 위의 전송 호출에 추가할 수 있습니다.모든 공급 프로그램은 자신의 덮어쓰기 설정을 가지고 있으며, Courier Integration Guides에서 그것들을 볼 수 있습니다.우리는 AWS SES integration에 첨부 파일을 덮어쓸 것입니다.
    AWS SES SDK를 추가하는 것부터 시작하겠습니다.
    > npm install @aws-sdk/client-s3
    
    다음은 인증에 필요한 환경 변수를 설정합니다.이를 위해서는 AWS 인증이 필요합니다.그것들은 접근 키 ID와 비밀 접근 키로 구성되어 있습니다.자세한 내용은 AWS Developer Guide에서 확인할 수 있습니다.사용하는 IAM 사용자가 최소한 S3 읽기 권한을 가지고 있는지 확인합니다.
    너의 문을 열어라.env 파일을 만들고 다음 줄을 추가한 다음, 이 값들을 증거로 바꿉니다.
    AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
    AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
    
    이제 색인으로 돌아갑니다.js 및 주 함수 위에 다음 행을 추가합니다.
    const S3 = require("@aws-sdk/client-s3");
    const s3Client = new S3.S3Client({
      region: "us-east-1"
    });
    
    이 코드는 에 저장된 자격 증명을 사용하여 S3 클라이언트를 만듭니다.환경 파일.us-east-1을 사용하지 않으면 지역으로 변경해야 합니다.이제 S3 메모리 통에서 대상을 가져오고 클라이언트가 실행하도록 명령을 만들 수 있습니다.
    주 함수 시작에 다음 코드를 추가합니다.
    const command = new S3.GetObjectCommand({
      Bucket: "courier-test-ajh",
      Key: "test-pdf.pdf"
    });
    const data = await s3Client.send(command);
    
    Bucket id와 추가할 파일의 키와 일치하도록 BucketKey의 값을 업데이트합니다.데이터는 첨부 파일에 필요한 모든 내용을 포함하지만, 베이스 64 문자열로 가져올 수 있도록 본문을 읽을 수 있는 흐름에서 버퍼로 변환해야 합니다.우리는 helper 함수를 사용하여 그것을 변환할 것이다.
    주 기능 위에 다음 기능을 추가합니다.
    function streamToBuffer(stream) {
      return new Promise((resolve, reject) => {
        let buffers = [];
        stream.on("error", reject);
        stream.on("data", (data) => buffers.push(data));
        stream.on("end", () => resolve(Buffer.concat(buffers)));
      });
    }
    
    이제 주 함수에 있는 데이터를 바로 사용할 수 있습니다.
    const command = new S3.GetObjectCommand({
      Bucket: "courier-test-ajh",
      Key: "invoice.pdf"
    });
    const data = await s3Client.send(command);
    const buff = await streamToBuffer(data.Body);
    
    이 모든 것을 사용하여 첨부 파일 대상을 만들 것입니다.
    const attachment = {
      filename: "invoice.pdf",
      contentType: data.ContentType,
      data: buff.toString("base64")
    };
    
    덮어쓰기를 사용하려면 Courier send call을 업데이트합니다.
    const { messageId } = await courier.send({
      eventId: "JBP08RT52PM35CNAJNM2GFCB9HHW",
      recipientId: "AYDRIAN10036",
      data: {
        name: "Aydrian"
      },
      override: {
        "aws-ses": {
          attachments: [attachment]
        }
      }
    });
    

    이 모든 것을 함께 놓아라


    이제 코드를 다시 실행하면 S3에서 지정한 파일을 추출하여 전자 우편에 첨부하고 보내야 합니다.
    완료한 코드는 다음과 같습니다.
    require("dotenv").config();
    const S3 = require("@aws-sdk/client-s3");
    const { CourierClient } = require("@trycourier/courier");
    
    const s3Client = new S3.S3Client({
      region: "us-east-1"
    });
    const courier = CourierClient();
    
    // Helper function that takes a stream and returns a buffer
    function streamToBuffer(stream) {
      return new Promise((resolve, reject) => {
        let buffers = [];
        stream.on("error", reject);
        stream.on("data", (data) => buffers.push(data));
        stream.on("end", () => resolve(Buffer.concat(buffers)));
      });
    }
    
    const main = async () => {
      // Retrieve the file from an S3 Bucket
      const command = new S3.GetObjectCommand({
        Bucket: "courier-test-ajh",
        Key: "invoice.pdf"
      });
      const data = await s3Client.send(command);
      // Convert the readable stream to a buffer
      const buff = await streamToBuffer(data.Body);
    
      // Create an attachment object to provide the override
      const attachment = {
        filename: "invoice.pdf",
        contentType: data.ContentType,
        data: buff.toString("base64")
      };
    
      const { messageId } = await courier.send({
        eventId: "JBP08RT52PM35CNAJNM2GFCB9HHW",
        recipientId: "AYDRIAN10036",
        data: {
          name: "Aydrian"
        },
        override: {
          "aws-ses": {
            attachments: [attachment]
          }
        }
      });
      console.log("Sent notification: ", messageId);
    };
    
    main();
    
    
    나는 이것이 도움이 되기를 바란다.AWS SES를 사용하지 않는 경우 다른 전자 메일 공급자를 사용하여 첨부 파일을 보내도록 Courier를 쉽게 구성할 수 있습니다.다른 e-메일 공급업체의 경우 Courier Email Integrations docs을 방문하여 덮어쓰기에 필요한 변경 사항을 검토하여 첨부 파일을 처리할 수 있습니다.해봐, 네 생각을 알게 해줘.
    처음에는 어려움이 있었거나 다른 전자 우편 공급자와 어떻게 협력할지 궁금했다.아래 설명서에서 채팅을 하거나 [email protected]에 이메일을 보내 주시면 감사하겠습니다.
    - 아드리안

    좋은 웹페이지 즐겨찾기