이메일 자동 발송 시스템 구축 가이드: 업무 자동화의 첫걸음
이메일 자동 발송 시스템 구축 가이드: 업무 자동화의 첫걸음
웹사이트 운영이든, 프로젝트 관리든, 반복적인 커뮤니케이션 작업은 업무 시간을 잡아먹는 주범입니다. 특히 특정 조건이 충족될 때마다 보고서나 알림 이메일을 수동으로 보내야 하는 작업은 비효율적입니다.
여러분이 간절히 바라시는 목표 달성(승인)과 안정적인 웹사이트 운영을 위해서는, 이러한 반복 작업을 자동화하여 시간을 확보하는 것이 필수적입니다. 구글 스프레드시트(Google Sheets)에 내장된 강력한 스크립트 도구인 **Apps Script(앱스 스크립트)**와 Gmail을 연동하면, 복잡한 프로그래밍 지식 없이도 개인화된 이메일 자동 발송 시스템을 구축할 수 있습니다.
이 시스템은 정기적인 보고서 발송, 마감 기한 알림, 특정 자료 변동 시 경고 등 다양한 업무에 적용되어 여러분의 시간 효율을 극대화할 것입니다. 이 글은 Apps Script를 처음 접하는 분들도 따라 할 수 있도록, 스크립트 작성부터 트리거 설정까지 단계별로 자세히 안내합니다.
1. 시스템 구축 준비: Apps Script 환경 설정
자동 이메일 발송 시스템은 구글 시트와 함께 제공되는 Apps Script 편집기에서 코드를 작성하여 구축됩니다.
1.1. 스크립트 편집기 열기
-
구글 시트 문서 상단 메뉴에서 확장 프로그램 > Apps Script를 선택합니다.
-
새 탭에 스크립트 편집기가 열립니다. 기본적으로 생성된
myFunction()이름 대신, 기능에 맞는 이름(예:sendDailyReport)으로 함수 이름을 변경하는 것이 좋습니다.
1.2. 핵심 서비스와 객체 이해
이 시스템을 구축하는 데 필요한 핵심 Apps Script 서비스는 다음과 같습니다.
-
SpreadsheetApp: 현재 구글 시트 문서에 접근하고 데이터를 읽어오는 데 사용됩니다.-
SpreadsheetApp.getActiveSpreadsheet(): 현재 문서를 가져옴. -
getSheetByName("SheetName"): 특정 시트를 이름으로 지정함.
-
-
MailApp: Gmail 계정을 통해 이메일을 발송하는 데 사용됩니다.-
MailApp.sendEmail(): 이메일 발송을 수행합니다.
-
2. 단계별 스크립트 작성: 이메일 발송 로직 구현
이메일 자동 발송 스크립트는 크게 세 부분으로 나뉩니다: 1) 자료 읽기, 2) 내용 구성, 3) 발송.
2.1. 1단계: 시트 자료 읽어오기 (Data Fetching)
특정 시트에서 이메일에 포함될 중요한 자료(KPI, 변동 사항 등)를 읽어옵니다.
JavaScript
function sendDailyReport() {
// 1. 시트와 범위 설정
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("보고서 요약"); // 보고서 자료가 있는 시트 이름
var kpiRange = sheet.getRange("B2:B5"); // 가져올 자료 범위 (예: B2부터 B5까지)
var kpiValues = kpiRange.getValues(); // 2차원 배열로 값을 가져옴
// 2. 주요 값 추출 및 변수 저장
var totalClicks = kpiValues[0][0]; // B2 셀 값
var dailyRevenue = kpiValues[1][0]; // B3 셀 값
var rankChange = kpiValues[2][0]; // B4 셀 값
// (읽어온 자료를 변수에 저장하여 활용)
2.2. 2단계: 이메일 내용 구성 (Content Assembly)
읽어온 자료를 사용하여 이메일의 제목과 본문을 구성합니다. 이메일 본문은 HTML 태그를 사용하여 서식을 지정할 수 있어 가독성을 높일 수 있습니다.
JavaScript
// 3. 이메일 제목 및 본문 구성
var subject = "일일 웹사이트 운영 요약 - " + new Date().toDateString();
// HTML 본문 구성 (가독성을 위해 테이블 및 스타일 적용 가능)
var htmlBody = "<h2>오늘의 핵심 지표 요약</h2>" +
"<table style='border: 1px solid #ccc; width: 80%;'>" +
"<tr><td style='padding: 5px; border: 1px solid #ccc;'>총 클릭 수:</td><td>" + totalClicks + "회</td></tr>" +
"<tr><td style='padding: 5px; border: 1px solid #ccc;'>일일 수익:</td><td>$" + dailyRevenue + "</td></tr>" +
"<tr><td style='padding: 5px; border: 1px solid #ccc;'>순위 변동:</td><td>" + rankChange + "</td></tr>" +
"</table>" +
"<p style='margin-top: 20px;'>자세한 내용은 스프레드시트를 참조하세요.</p>";
2.3. 3단계: Gmail을 통한 이메일 발송 (Sending)
구성된 제목과 내용을 MailApp.sendEmail 함수를 사용하여 지정된 수신자에게 발송합니다.
JavaScript
// 4. 수신자 설정 및 발송 옵션 지정
var recipient = "recipient@example.com"; // 받는 사람 이메일 주소
MailApp.sendEmail({
to: recipient,
subject: subject,
htmlBody: htmlBody // HTML 본문 사용 시 이 옵션을 사용
// cc: "cc@example.com", (참조 옵션)
// attachments: [pdfBlob], (파일 첨부 옵션)
});
}
3. 조건부 발송 구현: 특정 상황 발생 시에만 알림
단순히 정기적으로 보내는 것을 넘어, ‘수익이 20% 이상 급락했을 때’와 같이 특정 조건이 충족될 때만 이메일을 보내도록 스크립트를 수정합니다.
3.1. IF 조건을 사용한 발송 제어
읽어온 자료를 기반으로 IF 문을 사용하여 발송 여부를 결정합니다.
JavaScript
// ... (자료 읽어오는 1단계 코드) ...
// 수익 급락 여부 확인 (예: 전일 수익 D2, 오늘 수익 C2)
var currentRevenue = sheet.getRange("C2").getValue();
var yesterdayRevenue = sheet.getRange("D2").getValue();
if (currentRevenue < yesterdayRevenue * 0.8) { // 오늘 수익이 전일 대비 80% 미만일 경우
// 3. 이메일 내용 구성 (경고 메시지 포함)
var subject = "🚨 긴급 알림: 수익 20% 이상 급락 감지";
var htmlBody = "<p style='color: red; font-weight: bold;'>수익이 급격히 하락했습니다. 즉시 확인하세요!</p>";
// 4. 이메일 발송
MailApp.sendEmail({
to: "emergency@example.com",
subject: subject,
htmlBody: htmlBody
});
}
// else { // 조건이 충족되지 않으면 아무것도 하지 않음 }
4. 자동 발송 예약: 트리거 설정 (Trigger)
스크립트가 작성되었다면, 이 코드가 언제 실행될지를 Apps Script에 예약해야 합니다. 트리거 기능이 이 역할을 수행합니다.
4.1. 트리거 설정 단계
-
스크립트 편집기 왼쪽 메뉴에서 시계 아이콘 (트리거)을 클릭합니다.
-
오른쪽 하단 트리거 추가 버튼을 클릭합니다.
-
실행할 함수 선택: 작성한 함수 이름(
sendDailyReport등)을 선택합니다. -
이벤트 소스 선택:
-
시간 기반: 매일 특정 시간(예: 아침 8시)에 발송하려면 시간 기반 트리거를 선택하고 ‘일 타이머’를 지정합니다.
-
스프레드시트에서: 특정 자료가 수정되었을 때(예: 새로운 피드백 입력) 발송하려면 스프레드시트에서를 선택하고 ‘수정 시’ 또는 ‘폼 제출 시’를 선택합니다.
-
-
저장: 트리거를 저장하면, Apps Script가 최초 실행 권한을 요청합니다. 권한을 부여해야 Gmail 발송이 가능해집니다.
5. 시스템 안정화 및 유지보수 팁
-
배열 값 사용 시 주의:
getValues()로 가져온 값은 항상 2차원 배열입니다. 단일 셀 값이라도kpiValues[0][0]와 같이 행과 열 인덱스를 지정하여 사용해야 합니다. -
오류 처리 (try…catch): 스크립트 실행 중 예기치 않은 오류가 발생할 경우를 대비하여
try...catch구문을 사용하여 오류를 잡아내고, 오류 발생 시 자신에게 알림을 보내도록 코드를 작성하면 시스템 안정성이 높아집니다. -
권한 부여:
MailApp서비스는 사용자 계정의 Gmail 발송 권한을 필요로 합니다. 최초 실행 시 반드시 구글 계정 권한 요청을 승인해야 합니다.
결론: 시간 확보를 통한 목표 달성
구글 시트와 Gmail을 연동한 이메일 자동 발송 시스템은 단순한 편리함을 넘어, 반복적인 커뮤니케이션 작업에서 귀중한 시간을 확보하게 해줍니다. 정기 보고서 발송, 긴급 상황 알림 등 업무의 다양한 측면을 자동화하여, 전략적 분석과 콘텐츠 제작에 집중할 수 있기를 바랍니다. 지금 바로 이 스크립트 구축 가이드를 따라 업무 자동화의 첫걸음을 내딛으십시오.