카테고리 없음

구글 앱스 스크립트, 이메일 업무 자동화하기

bmcrider 2025. 10. 29. 12:08

매일 반복되는 이메일 업무에 지치셨나요? Google Apps Script를 활용하면 Gmail 작업 흐름을 간편하게 자동화하고 소중한 시간을 절약할 수 있습니다. 이 가이드는 개인화된 메시지 전송, 보관, 라벨 지정, 일정 예약 등 이메일 작업을 자동화하는 기본 단계들을 다룹니다.

환경 설정하기

 

환경 설정하기

Google Drive로 이동하여 새로 만들기 > 더보기 > Google Apps Script를 클릭하거나 기존 스크립트 프로젝트를 엽니다. 프로젝트 이름은 "Email Automation"처럼 명확하게 지정하세요. 코드는 Apps Script의 온라인 에디터에서 작성하며, GmailApp, SpreadsheetApp, ClockTriggerBuilder 같은 내장 서비스를 지원합니다.

 

개인화된 이메일 대량 전송

여러 수신자에게 맞춤 이메일을 보내야 할 경우, 수작업은 오류가 발생하기 쉽고 시간이 오래 걸립니다. 대신 수신자 데이터를 Google Sheets에 저장하세요. 예: 이메일 주소, 이름, 제목, 본문 등의 열을 포함합니다. 그런 다음 Apps Script로 해당 데이터를 불러와 자동으로 이메일을 보낼 수 있습니다.

 

function sendBulkEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Recipients');
  const data = sheet.getDataRange().getValues(); // 헤더 포함
  for (let i = 1; i < data.length; i++) {
    const [email, firstName, subject, body] = data[i];
    const personalizedBody = body.replace('{{FirstName}}', firstName);
    GmailApp.sendEmail(email, subject, personalizedBody);
  }
}

이 스크립트는 각 행을 순회하며(헤더 제외), {{FirstName}} 같은 플레이스홀더를 사용해 본문을 개인화하고 GmailApp.sendEmail로 이메일을 전송합니다.

 

이메일 보관 및 라벨 지정

이메일 전송 후, 이를 추적하기 위해 라벨을 지정하고 보관할 수 있습니다. 다음과 같은 방식으로 구현할 수 있습니다:

 

function archiveSentEmails() {
  const label = GmailApp.getUserLabelByName('Processed') 
               || GmailApp.createLabel('Processed');
  const threads = GmailApp.search('in:sent newer_than:1d'); // 날짜 조건 조정 가능
  threads.forEach(thread => {
    thread.addLabel(label);
    thread.moveToArchive();
  });
}

이 코드는 최근 하루 이내에 보낸 이메일(newer_than:1d)을 검색해 "Processed" 라벨을 부착하고 보관 처리합니다. 검색 쿼리는 필요에 맞게 수정하세요.

 

시간 기반 트리거로 자동 실행

스크립트를 자동으로 실행하려면 시간 기반 트리거를 설정하세요. Apps Script에서는 함수 실행 시간을 설정할 수 있습니다. 예를 들어:

 

function createTimeTrigger() {
  ScriptApp.newTrigger('sendBulkEmails')
           .timeBased()
           .everyDay()
           .atHour(9) // 오전 9시
           .create();
}

이와 유사하게 보관 트리거도 설정할 수 있습니다:

 

function createArchiveTrigger() {
  ScriptApp.newTrigger('archiveSentEmails')
           .timeBased()
           .everyDay()
           .atHour(18) // 오후 6시
           .create();
}

이 트리거들은 각각 오전 9시와 오후 6시에 자동으로 스크립트를 실행합니다.

 

오류 처리 및 로그 기록

자동화는 무인으로 실행되므로, 로그 기록과 오류 처리는 필수입니다. Logger.log()를 사용해 실행 흐름을 기록하고, try/catch 블록으로 예외를 처리하세요.

 

function sendBulkEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Recipients');
  const data = sheet.getDataRange().getValues();
  for (let i = 1; i < data.length; i++) {
    const [email, firstName, subject, body] = data[i];
    const personalizedBody = body.replace('{{FirstName}}', firstName);
    try {
      GmailApp.sendEmail(email, subject, personalizedBody);
      Logger.log(`Email sent to ${email}`);
    } catch (e) {
      Logger.log(`Failed to send to ${email}: ${e}`);
    }
  }
}

로그는 Apps Script 편집기 상단 메뉴의 보기 > 로그에서 확인할 수 있습니다. 고급 사용자라면 Stackdriver Logging을 활용하거나 오류 발생 시 관리자에게 이메일로 알릴 수도 있습니다.

 

전체 흐름 정리

전체 자동화 흐름 요약:

 

  • Google Sheets에 수신자와 메시지 템플릿 저장
  • 이메일 전송 스크립트 작성 및 테스트
  • 처리된 이메일 라벨 지정 및 보관 설정
  • 시간 기반 트리거 설정
  • 로그 기록과 오류 처리 구성

이 구조는 수동 개입 없이도 이메일이 정기적으로 전송되고, 개인화되며, 관리되는 시스템을 제공합니다.

 

다음 단계 및 팁

기본 자동화가 정상적으로 작동한다면 다음과 같은 향상된 기능도 고려해보세요:

 

  • 동적 이메일 선정을 위한 고급 검색 쿼리 활용
  • Drive에서 파일 첨부 기능 추가 (attachments 옵션 사용)
  • 자동화 로그나 상태를 시트 또는 DB에 기록
  • 오류 발생 시 관리자에게 이메일 알림 발송
  • 코드와 트리거에 대한 문서화 진행

Google Apps Script를 이용하면 Gmail 업무를 시간 절약형, 일관성 높은 자동화 시스템으로 구축할 수 있습니다. 단순한 스크립트가 강력한 도구로 진화할 수 있습니다.

 

맺음말

Google Apps Script는 맞춤 이메일 전송부터 라벨 관리, 자동 보관까지 다양한 이메일 자동화를 가능하게 합니다. 시간 트리거, 오류 처리, 로그 기록 기능을 통해 신뢰성 높은 자동화 시스템을 구축할 수 있습니다.

 

이메일 자동화를 더 발전시키고 싶으신가요? 첨부파일 전송, 조건부 분기, Sheets 및 Forms 연동 등의 고급 기능에 대해 원하신다면 알려주세요.