임시보관 메일 작성하기

Google Workspace 부가기능에서는 연결된 작업이 있는 위젯을 만들 수 있습니다. 작업을 사용하여 새 이메일 초안을 작성할 수 있으며, 원하는 경우 애드온 UI에 입력된 정보나 열려 있는 메시지의 정보를 사용하여 초안을 작성할 수 있습니다. 예를 들어 부가기능의 메시지 UI에 현재 열려 있는 메시지에 대한 답장을 만들고 부가기능의 정보로 미리 채워진 버튼을 둘 수 있습니다.

메일을 작성하는 작업이 트리거되면 Gmail은 콜백 함수를 실행하여 초안을 작성하고 반환합니다. 그러면 Gmail의 UI에 표준 이메일 작성 창에 초안이 표시되며, 사용자는 필요에 따라 초안을 수정하고 전송할 수 있습니다.

임시보관 메일을 작성하는 작업을 구성합니다.

선택 시 초안 작성 작업을 시작하도록 위젯을 구성하려면 다음을 실행해야 합니다.

  1. 매니페스트action.compose 범위가 포함되어 있는지 확인합니다.

    https://www.googleapis.com/auth/gmail.addons.current.action.compose

    대신 더 허용적인 범위를 사용할 수 있지만 해당 범위가 절대적으로 필요한 경우에만 사용해야 합니다.

  2. Action 객체를 만들고 정의한 콜백 함수와 연결합니다.

  3. Action 객체를 제공하고 ComposeEmailType를 지정하여 위젯의 setComposeAction() 위젯 핸들러 함수를 호출합니다.

  4. 초안 작성 작업을 실행하는 콜백 함수를 구현합니다. 이 함수에는 이벤트 객체가 인수로 제공됩니다. 콜백 함수는 다음을 수행해야 합니다.

    1. GmailDraft 객체를 만듭니다.
    2. ComposeActionResponseBuilder 클래스와 GmailDraft 객체를 사용하여 ComposeActionResponse 객체를 빌드합니다.
    3. 빌드된 ComposeActionResponse를 반환합니다.

콜백 함수에서 만든 GmailDraft을 수신자, 제목, 메시지 본문, 첨부파일로 미리 채울 수 있습니다. 초안을 작성하기 위해 데이터는 모든 소스에서 가져올 수 있지만 일반적으로 부가기능 자체에 제공된 정보, 열린 메시지의 정보 또는 서드 파티 서비스에서 수집된 정보에서 파생됩니다. 콜백 함수에 전달된 이벤트 객체에는 열린 메시지 ID와 초안을 미리 채우는 데 사용할 수 있는 기타 부가기능 정보가 포함됩니다.

새 독립형 메시지로 초안을 만들거나 기존 메시지에 대한 답장으로 초안을 만들 수 있습니다. 이는 setComposeAction()에 제공된 ComposeEmailType enum에 의해 제어됩니다. 답장 초안을 단일 답장 또는 '전체 답장' 메시지로 만들 수 있습니다.

독립형 초안

독립형 초안은 새 대화목록을 시작하며 기존 메시지에 대한 답장이 아닙니다. 다음 Gmail 서비스 함수 중 하나를 사용하여 독립형 초안을 만들 수 있습니다.

답장 초안

답장 초안은 기존 메시지 대화목록의 일부입니다. 답장 초안은 메일 발신자에게만 전송되는 단일 답장 또는 해당 메일을 받은 모든 사용자에게 전송되는 '전체답장' 초안입니다. 다음 Gmail 서비스 함수 중 하나를 사용하여 답장 초안을 만들 수 있습니다.

다음 코드 스니펫은 답장 초안을 작성하는 작업을 버튼에 할당하는 방법을 보여줍니다.

  var composeAction = CardService.newAction()
      .setFunctionName('createReplyDraft');
  var composeButton = CardService.newTextButton()
      .setText('Compose Reply')
      .setComposeAction(
          composeAction,
          CardService.ComposedEmailType.REPLY_AS_DRAFT);

  // ...

  /**
   *  Creates a draft email (with an attachment and inline image)
   *  as a reply to an existing message.
   *  @param {Object} e An event object passed by the action.
   *  @return {ComposeActionResponse}
   */
  function createReplyDraft(e) {
    // Activate temporary Gmail scopes, in this case to allow
    // a reply to be drafted.
    var accessToken = e.gmail.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    // Creates a draft reply.
    var messageId = e.gmail.messageId;
    var message = GmailApp.getMessageById(messageId);
    var draft = message.createDraftReply('',
        {
            htmlBody: "Kitten! <img src='cid:kitten'/>",
            attachments: [
              UrlFetchApp.fetch('https://example.com/images/myDog.jpg')
                  .getBlob()
            ],
            inlineImages: {
              "kitten": UrlFetchApp.fetch('https://example.com/images/myKitten.jpg')
                           .getBlob()
            }
        }
    );

    // Return a built draft response. This causes Gmail to present a
    // compose window to the user, pre-filled with the content specified
    // above.
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
  }