구글 스프레드시트에 정리된 수십 명의 연락처로 각기 다른 내용의 이메일을 수동으로 보내느라 매번 반복 작업을 하고 계신가요? 수신자 이름과 특정 정보를 일일이 대조하며 이메일을 작성하는 것은 시간 소모가 크고, 작은 실수 하나로 인해 중요한 메시지가 잘못 전달될 위험도 있습니다.
이러한 비효율적인 수동 작업은 현대 비즈니스 환경에서 더 이상 합리적인 선택이 아닙니다. 필요한 것은 정교하고 자동화된 해결책입니다.
이 글에서는 구글 앱스스크립트를 활용하여 스프레드시트 데이터 기반의 개인화된 이메일 자동 발송 시스템을 구축하고, 이 과정을 완벽하게 자동화하는 단계별 가이드를 제공합니다. 이제 수동 작업에서 벗어나 효율을 90% 이상 끌어올릴 시간입니다.
– 구글 앱스스크립트는 스프레드시트와 연동하여 이메일 자동 발송에 최적화된 도구입니다.
– 개인화된 이메일 템플릿과 스프레드시트 데이터를 결합해 수십 통의 이메일을 효율적으로 처리할 수 있습니다.
– 트리거 설정을 통해 특정 조건이나 시간에 맞춰 이메일 발송을 완전 자동화할 수 있습니다.
- 스프레드시트 이메일 자동발송, 왜 앱스스크립트인가?
- 자동발송을 위한 스프레드시트 및 환경 준비
- 앱스스크립트 코드로 이메일 발송 자동화 구축하기
- 트리거 설정과 실행, 그리고 주의사항
스프레드시트 이메일 자동발송, 왜 앱스스크립트인가?
수많은 자동화 도구 중에서도 구글 앱스스크립트(Google Apps Script)는 구글 생태계 내에서 강력한 이점을 가집니다. 특히 구글 스프레드시트와 지메일(Gmail)은 물론, 구글 드라이브, 캘린더 등 다양한 서비스와 완벽하게 통합되어 추가적인 설정 없이도 유기적인 연동이 가능합니다. 이는 개발 지식이 부족한 사용자라도 진입 장벽을 낮춰줍니다.
앱스스크립트는 자바스크립트 기반으로 동작하여 유연성이 높고, 스프레드시트의 특정 셀 값이나 행 데이터를 실시간으로 읽어와 이메일 내용에 반영하는 개인화된 발송이 가능합니다. 수십 명, 심지어 수백 명에게 각각 다른 이름과 정보를 담아 이메일을 보내야 할 때, 매크로를 넘어선 고차원적인 자동화가 앱스스크립트의 핵심 강점입니다.
앱스스크립트는 구글 계정만 있다면 별도의 설치 과정 없이 웹 기반 환경에서 바로 개발 및 실행이 가능합니다. 이는 초기 설정 시간을 크게 단축시켜 줍니다.
자동발송을 위한 스프레드시트 및 환경 준비
이메일 자동 발송을 시작하기 전에, 발송에 필요한 데이터를 효과적으로 관리할 스프레드시트를 구성해야 합니다. 데이터의 일관성과 정확성은 성공적인 자동 발송의 첫걸음입니다. 최소한 수신자 이메일 주소, 수신자 이름, 발송할 이메일 제목, 그리고 이메일 본문에 들어갈 핵심 내용이 각각의 열에 명확하게 구분되어야 합니다.
또한, 발송 여부를 추적할 ‘발송 상태’와 같은 열을 추가하여 중복 발송을 방지하고 작업 진행 상황을 한눈에 파악하는 것이 좋습니다. 처음부터 꼼꼼하게 스프레드시트 양식을 설계하면, 나중에 스크립트를 수정할 필요 없이 유연하게 사용할 수 있습니다.
- 스프레드시트 열 구성 — A열부터 ‘이메일 주소’, ‘이름’, ‘제목’, ‘내용’, ‘발송 상태’와 같이 필요한 항목들을 정의합니다. 첫 행은 반드시 헤더로 사용하고 데이터는 두 번째 행부터 입력합니다.
- 데이터 입력 및 형식 확인 — 각 열에 실제 발송할 데이터를 정확히 입력합니다. 특히 이메일 주소는 오타가 없는지, 내용에 필요한 변수(예: {{이름}})가 제대로 들어가 있는지 검토합니다.
- 템플릿 시트 생성 (선택 사항) — 복잡한 이메일 본문이나 HTML 템플릿을 사용하는 경우, 별도의 시트(예: ‘템플릿’)를 만들어 관리하면 스크립트 가독성과 유지보수성이 향상됩니다. 이 경우, 본문 열에는 템플릿의 특정 부분을 대체할 값만 넣으면 됩니다.
앱스스크립트 코드로 이메일 발송 자동화 구축하기
이제 준비된 스프레드시트를 기반으로 이메일 자동 발송 기능을 구현할 앱스스크립트 코드를 작성할 차례입니다. 스프레드시트 상단 메뉴에서 ‘확장 프로그램’ -> ‘Apps Script’를 클릭하면 스크립트 편집기 창이 열립니다. 여기에 아래의 기본 코드를 붙여넣고, 자신의 스프레드시트 구조에 맞게 수정하면 됩니다.
핵심 로직은 스프레드시트의 각 행을 반복하며 데이터를 읽어오고, 해당 데이터로 이메일 내용을 구성한 뒤, GmailApp 서비스를 통해 이메일을 발송하는 것입니다. ‘발송 상태’ 열을 활용하여 이미 발송된 이메일은 건너뛰는 조건문을 추가하면, 반복 실행 시 발생할 수 있는 중복 발송 문제를 효율적으로 방지할 수 있습니다.
function sendEmailsFromSheet() {
const sheetName = 'Sheet1'; // 데이터가 있는 시트 이름
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName);
if (!sheet) {
Logger.log('시트를 찾을 수 없습니다: ' + sheetName);
return;
}
const lastRow = sheet.getLastRow();
if (lastRow <= 1) { // 헤더만 있는 경우
Logger.log('발송할 데이터가 없습니다.');
return;
}
// 데이터 범위: 헤더(1행) 제외, 2행부터 마지막 행까지
const dataRange = sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn());
const data = dataRange.getValues();
data.forEach((row, index) => {
const emailAddress = row[0]; // A열: 이메일 주소
const name = row[1]; // B열: 이름
const subject = row[2]; // C열: 제목
let body = row[3]; // D열: 본문 내용
const sentStatus = row[4]; // E열: 발송 상태
// 이미 발송된 경우 건너뛰기
if (sentStatus === '발송 완료') {
return;
}
// 본문 내용에 변수 치환 예시
body = body.replace('{{이름}}', name);
// 필요에 따라 다른 변수들도 추가 치환
try {
GmailApp.sendEmail(emailAddress, subject, body);
sheet.getRange(index + 2, 5).setValue('발송 완료'); // E열에 발송 상태 업데이트 (2행부터 시작하므로 index + 2)
Logger.log(name + '님에게 이메일 발송 완료.');
SpreadsheetApp.flush(); // 변경 사항 즉시 적용
} catch (e) {
sheet.getRange(index + 2, 5).setValue('발송 실패: ' + e.message);
Logger.log(name + '님에게 이메일 발송 실패: ' + e.message);
SpreadsheetApp.flush();
}
});
Logger.log('모든 이메일 발송 시도 완료.');
}
위 코드를 복사하여 앱스스크립트 편집기에 붙여넣으세요. `sheetName`, `row[0]`, `row[1]` 등 인덱스 값은 자신의 스프레드시트 열 구성에 맞게 조정해야 합니다. 예를 들어, 이메일 주소가 B열에 있다면 `row[0]` 대신 `row[1]`로 수정하는 식입니다. 코드를 저장한 뒤 실행 버튼을 누르면 처음에는 권한 허용 절차가 한 번 진행되며, 이후에는 정상적으로 작동합니다.
트리거 설정과 실행, 그리고 주의사항
스크립트를 수동으로 실행하는 것도 가능하지만, 진정한 자동화는 ‘트리거(Trigger)’ 설정을 통해 완성됩니다. 앱스스크립트 편집기 좌측 메뉴에서 시계 모양 아이콘(트리거)을 클릭하여 새로운 트리거를 추가할 수 있습니다. 예를 들어, 매일 특정 시간에 자동으로 이메일을 발송하거나, 스프레드시트의 특정 셀이 수정되었을 때 발송되도록 설정할 수 있습니다.
트리거를 설정할 때는 실행할 함수(sendEmailsFromSheet), 실행 방식(시간 기반, 스프레드시트 변경 시 등), 그리고 오류 알림 설정을 꼼꼼히 확인해야 합니다. 특히 시간 기반 트리거는 매일 아침 9시처럼 특정 주기로 반복 작업을 수행할 때 매우 유용하며, 단 3분이면 설정이 가능합니다.
구글 Gmail 계정은 하루에 발송할 수 있는 이메일 수에 제한이 있습니다. 일반 Gmail 계정은 일일 약 100건, 유료 Workspace 계정은 일일 1500건으로 알려져 있습니다. 이 제한을 초과하면 해당일에는 더 이상 이메일이 발송되지 않으니, 대량 발송 시에는 이 점을 유의해야 합니다. 스크립트 실행 중 문제가 발생하면 Apps Script 대시보드의 ‘실행’ 로그를 확인하여 원인을 파악할 수 있습니다.
구글 앱스스크립트는 스프레드시트와 연동하여 반복적인 이메일 발송 작업을 획기적으로 자동화하는 강력한 도구입니다. 이 글에서 제시된 단계를 따르면, 수동으로 수십 통의 이메일을 보내는 비효율적인 방식에서 벗어나, 중요한 업무에 집중할 수 있는 환경을 구축할 수 있습니다.
지금 바로 적용해 보세요.
- Google Sheets for Apps Script — 구글 앱스스크립트에서 스프레드시트를 제어하는 공식 문서
- Gmail Service for Apps Script — 앱스스크립트 Gmail 서비스 사용법 공식 문서
구글 앱스스크립트를 활용하면 스프레드시트 데이터를 기반으로 이메일 자동 발송 시스템을 손쉽게 구축하여 업무를 자동화할 수 있습니다.
동영상으로 보는 구글 앱스스크립트 스프레드시트 이메일 자동발송
글로 충분하지 않다면 관련 영상을 함께 보세요. 클릭하면 YouTube에서 검색 결과로 이동합니다.
자주 묻는 질문
Q. 스프레드시트 데이터로 이메일을 자동 발송하면 어떤 점이 좋은가요?
A. 수백 통의 이메일을 수동으로 보내는 시간을 절약하고, 반복적인 업무를 자동화하여 생산성을 크게 높일 수 있습니다. 또한, 특정 조건에 따라 맞춤형 이메일을 일괄 발송할 수 있어 업무 효율성이 향상됩니다.
Q. 구글 앱스스크립트를 사용하려면 반드시 코딩 지식이 있어야 하나요?
A. 기본적인 코딩 지식이 있다면 더 쉽게 활용할 수 있지만, 복잡한 코딩 지식이 없어도 됩니다. 인터넷에 공개된 다양한 예시 스크립트를 조금만 수정하거나 따라 하기 쉬운 가이드를 활용하여 충분히 목적을 달성할 수 있습니다.
Q. 스프레드시트에 있는 고객 이름, 주문 번호 등 개별 데이터를 이메일 내용에 자동으로 넣을 수 있나요?
A. 네, 가능합니다. 앱스스크립트를 활용하면 스프레드시트의 각 행에 있는 특정 데이터를 이메일 본문이나 제목에 동적으로 삽입하여, 개별 맞춤형 이메일을 대량으로 쉽게 생성하고 발송할 수 있습니다.
Q. 이메일 발송은 한 번만 가능한가요, 아니면 특정 시점에 자동으로 반복 발송되게 설정할 수 있나요?
A. 앱스스크립트의 트리거 기능을 이용하면 스크립트가 실행되는 시점을 다양하게 설정할 수 있습니다. 특정 시각에 주기적으로 실행되도록 하거나, 스프레드시트 내용이 변경되었을 때 등 특정 이벤트 발생 시 자동으로 이메일이 발송되도록 설정할 수 있습니다.
📚 함께 읽으면 좋은 글
