이메일 트리거 확장 프로그램으로 Handlebars 템플릿 사용

확장 프로그램을 구성하는 동안 '템플릿 컬렉션' 매개변수를 지정한 경우 이메일용 Handlebars 템플릿을 만들고 관리할 수 있습니다.

템플릿 컬렉션 구조

템플릿 컬렉션에 작성하는 문서에서 템플릿 이름으로 사용할 기억하기 쉬운 ID를 각 문서에 지정합니다.

템플릿 문서에는 다음과 같은 필드가 포함될 수 있습니다.

  • subject: 이메일의 제목에 대한 템플릿 문자열입니다.
  • text: 이메일의 일반 텍스트 콘텐츠에 대한 템플릿 문자열입니다.
  • html: 이메일의 HTML 콘텐츠에 대한 템플릿 문자열입니다.
  • amp: 이메일의 AMP4EMAIL 콘텐츠에 대한 템플릿 문자열입니다.
  • attachments: 템플릿 문자열을 값으로 포함하는 첨부파일 배열입니다. 지원되는 Nodemailer 옵션에는 utf-8 문자열, 커스텀 콘텐츠 유형, URL, 인코딩된 문자열, 데이터 URI, 사전 생성된 MIME 노드가 있습니다(이메일은 클라우드 서버 파일 시스템에 액세스할 수 없음).

예시 템플릿에는 following ID 및 다음과 같은 콘텐츠가 포함될 수 있습니다.

{
  subject: "@{{username}} is now following you!",
  html: "Just writing to let you know that <code>@{{username}}</code> ({{name}}) is now following you.",
  attachments: [
    {
     filename: "{{username}}.jpg",
     path: "{{imagePath}}"
    }
  ]
}

템플릿을 사용하여 이메일 보내기

템플릿을 사용하여 이메일을 전송하려면 메일 컬렉션에 문서를 추가할 때 namedata 속성이 있는 template 필드를 포함합니다. 예를 들어 위의 following 템플릿을 사용하는 경우 다음과 같습니다.

admin
  .firestore()
  .collection("MAIL_COLLECTION")
  .add({
    toUids: ["abc123"],
    template: {
      name: "following",
      data: {
        username: "ada",
        name: "Ada Lovelace",
        imagePath: "https://example.com/path/to/file/image-name.jpg"
      },
    },
  });

템플릿 부분

템플릿 문서에서 {partial: true}를 지정하여 재사용 가능한 부분을 사용해 템플릿을 작성할 수 있습니다. 각 표준 데이터 필드(subject, html, text, amp)는 자체 환경에서만 부분적으로 사용되는 것으로 정의됩니다. 예를 들어 footer 부분에는 다음과 같은 데이터가 있을 수 있습니다.

{
  partial: true,
  html: "<p>This mail was sent by ExampleApp, Inc. <a href='https://example.com/unsubscribe'>Unsubscribe</a></p>",
  text: "This mail was sent by ExampleApp, Inc. Unsubscribe here: https://example.com/unsubscribe"
}

다른 템플릿에서는 다음과 같이 이름(문서 ID)을 참조하여 해당 부분을 포함합니다.

<p>This is my main template content, but it will use a common footer.</p>

{{> footer }}