회사에서 마케터, 총무, 혹은 영업 담당자로 일하다 보면 아주 끔찍하고 단순한 반복 업무를 마주하게 됩니다. 바로 수십, 수백 명의 고객이나 파트너사에게 이메일을 발송하는 일입니다.
단순히 똑같은 메일을 숨은 참조(BCC)로 보내면 편하겠지만, 비즈니스 매너상 그렇게 할 수 없습니다. 이메일 앞머리에 "안녕하세요, [홍길동] 대표님"이라고 이름을 정확히 불러줘야 하고, 본문 중간에는 각자의 [청구 금액]과 [만기일]을 다르게 적어 보내야만 수금율이 올라가기 때문입니다.
결국 직장인들은 스프레드시트를 왼쪽 화면에 띄우고, 오른쪽에는 아웃룩이나 지메일 창을 켠 채, "복사 - 붙여넣기 - 이름 수정 - 금액 수정 - 발송"이라는 영혼 없는 업무를 거래처 수만큼 무한 반복합니다. 이 과정에서 이름을 잘못 매칭해 메일을 잘못 보내기라도 하면 회사 신뢰도에 치명적인 타격을 입게 되죠.
오늘은 단 한 번의 클릭으로 스프레드시트 명단 속 데이터를 0.1초 만에 파싱하여, 각 고객의 맞춤형 개별 이메일을 지메일(Gmail)로 일괄 발송하는 '개인화 Gmail 대량 발송 시스템' 구축 공식을 전수합니다.
## 1. 개인화 자동 발송의 원리
우리가 수작업으로 수행하던 복사-붙여넣기 과정을 구글 서버의 Apps Script 비서에게 대리 운전시키는 메커니즘입니다.
명단시트에 정리된 테이블의 각 행(Row)을 위에서 아래로 순차적으로 훑습니다.한 행을 읽을 때마다 해당 열에 적혀 있는
이메일 주소,이름,청구 금액,만기일데이터를 메모리에 변수로 담습니다.미리 정의해 둔 이메일 템플릿의 변수 칸(예:
{이름})을 읽어온 실시간 데이터로 교체(Replace)합니다.구글 내장
MailApp서비스에 이메일 규격을 던져 지메일 발송을 백그라운드에서 실시간 처리합니다.
## 2. 3분 실무 실천 가이드: 자동 이메일 발송기 빌드
[1단계] 스프레드시트 명단 탭 구성하기
구글 스프레드시트 하단 탭 이름을
이메일명단으로 만들어 줍니다.1행에 순서대로 머리글을 채웁니다:
A열:
이메일주소, B열:이름, C열:청구금액, D열:만기일, E열:발송상태
아래에 실제 테스트가 가능한 내 부계정 이메일 등을 샘플로 적어 둡니다. 청구 금액과 만기일도 자유롭게 채워 넣으세요.
[2단계] Apps Script 열고 자동 발송 코드 이식하기
스프레드시트 상단
[확장 프로그램] -> [Apps Script]로 이동합니다.12편에서 사용한 코드 아래에 이어서 붙여넣거나 새 파일을 만들어 아래의 실전 발송 함수를 심어줍니다.
function sendPersonalizedEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("이메일명단");
// 데이터가 있는 전체 행 범위를 가져옵니다. (헤더인 1행 제외하고 2행부터 시작)
var startRow = 2;
var lastRow = sheet.getLastRow();
if (lastRow < startRow) {
SpreadsheetApp.getUi().alert("❌ 발송할 이메일 명단 데이터가 존재하지 않습니다.");
return;
}
var dataRange = sheet.getRange(startRow, 1, lastRow - startRow + 1, 5);
var data = dataRange.getValues();
var successCount = 0;
for (var i = 0; i < data.length; i++) {
var email = data[i][0]; // A열: 이메일주소
var name = data[i][1]; // B열: 이름
var amount = data[i][2]; // C열: 청구금액
var dueDate = data[i][3]; // D열: 만기일
var status = data[i][4]; // E열: 발송상태
// 이미 발송 완료된 행은 중복 발송하지 않고 건너뜁니다.
if (status === "발송완료") {
continue;
}
// 필수 데이터 누락 체크
if (!email || !name) {
continue;
}
// 청구 금액 숫자에 천 단위 쉼표 포맷 입히기
var formattedAmount = Number(amount).toLocaleString('ko-KR') + "원";
// 만기일 날짜 포맷 정리하기
var formattedDate = Utilities.formatDate(new Date(dueDate), "GMT+09:00", "yyyy년 MM월 dd일");
// 이메일 제목 및 본문 개인화 템플릿 설계
var subject = "[비움컴퍼니] " + name + " 귀하, 미납 대금 및 정산 일정 안내";
var body = "안녕하세요, " + name + " 대표님.\n\n" +
"귀사의 무궁한 발전을 기원합니다.\n" +
"다름이 아니라 당사와의 거래에 따른 미납 정산금 일정을 아래와 같이 안내해 드립니다.\n\n" +
"■ 정산 금액: " + formattedAmount + "\n" +
"■ 입금 기한: " + formattedDate + "까지\n\n" +
"위 기일 내에 지정된 법인 계좌로 입금을 부탁드립니다. 관련하여 문의가 있으신 경우 본 메일의 회신 또는 고객센터로 연락해 주세요.\n\n" +
"감사합니다.\n" +
"비움컴퍼니 정산팀 드림.";
try {
// 실제 Gmail 서비스를 호출해 개인화 메일 발송
MailApp.sendEmail(email, subject, body);
// 발송 성공 시 시트의 E열(발송상태)에 '발송완료'와 날짜 기록
sheet.getRange(startRow + i, 5).setValue("발송완료");
successCount++;
} catch (error) {
sheet.getRange(startRow + i, 5).setValue("에러: " + error.message);
}
}
SpreadsheetApp.getUi().alert("📧 메일 전송 작업 완료!\n성공적으로 발송된 이메일: " + successCount + "건");
}
저장 아이콘을 누릅니다.
[3단계] 메일 자동 발송 단추 만들기
다시 시트 화면으로 복귀하여
[삽입] -> [그림]메뉴에서 "이메일 단체 발송" 버튼 이미지를 만듭니다.버튼 이미지의 우측 상단 점 3개를 클릭하고
스크립트 할당을 선택합니다.입력창에 함수명인
sendPersonalizedEmails를 정확히 입력하고 적용합니다.
이제 내 테스트 데이터를 상태 칸 비워둔 채 버튼을 툭 눌러보세요. 1초도 안 되어 내 지메일 보낸편지함을 확인하면, 각 수신인의 이름과 청구 금액이 소름 돋게 알맞게 바뀌어 각각 개별적으로 정교하게 전송된 메일 목록을 확인할 수 있습니다!
## 3. 대량 발송 시 실무자가 지켜야 할 철칙과 제한 사항
구글의 하루 발송 한도(Quota) 제한: 구글은 스팸 메일 양산을 막기 위해 하루 보낼 수 있는 이메일 개수에 제한을 둡니다. 개인 계정(@gmail.com)은 하루 최대 100건, 비즈니스 유료 계정(Google Workspace)은 하루 최대 1,500건까지 발송 가능합니다. 만약 발송할 명단이 이 제한 수치보다 많다면 하루치 발송 분량을 나누어서 분할 처리해야 합니다.
'발송완료' 중복 방지 필터의 소중함: 위 코드에서 가장 핵심적인 예외 처리는
if (status === "발송완료") { continue; }영역입니다. 이 필터가 없으면 100명 중 신규 유입자 5명에게 추가 메일을 보낼 때, 기존에 메일을 받았던 95명에게 똑같은 이메일이 한 번 더 무작정 쏟아져 들어가는 최악의 스팸 대참사가 발생합니다. 발송 상태를 실시간 기록하고 예외 처리하는 것은 업무 자동화의 필수 규칙입니다.
앱스 스크립트의
MailAppAPI를 사용하면 스프레드시트의 가로행 데이터를 한 행씩 분해하여 지메일 발송 서버로 무한동력 전송할 수 있다.
문자열 포맷팅 기술을 이용해
{이름},{청구금액},{만기일}등 각 셀 속성의 원천 데이터를 맞춤형 문맥으로 치환하여 보낼 수 있다.
대량 발송 시스템에서는 중복 발송을 막는 발송 완료 분기점 필터(
continue)를 반드시 심어야 신뢰도 높은 자동화를 완성할 수 있다.
다음 14편에서는 구글 설문지(Google Forms)로 들어온 설문 결과 데이터를 한 땀 한 땀 취합할 필요 없이, 시트에 실시간 실시간 자동 연동하고 대시보드 그래프까지 다이렉트로 업데이트시키는 "구글 설문지(Forms)와 스프레드시트 실시간 연동 및 대시보드 자동 업데이트 설계" 비법을 알아봅니다.
매주 이메일을 개별적으로 복사해 붙여넣느라 골머리를 썩였던 정기 메일 업무가 있으신가요? 이 자동 발송기를 업무에 도입한다면 매주 몇 시간의 야근을 아낄 수 있을지 댓글로 환호성을 질러주세요!
