이메일 자동 발송을 어느 정도 익히면 다음으로 필요한 것은 수신자를 코드에 직접 적지 않고 엑셀에서 불러오는 방식입니다. 실무에서는 거래처, 팀원, 부서 담당자처럼 발송 대상이 자주 바뀌기 때문에, 메일 주소를 코드에 하나씩 넣는 방식은 관리가 불편하고 실수도 많아집니다. 이번 글에서는 파이썬으로 엑셀 수신자 목록을 읽어 메일을 보내는 가장 기본적인 흐름을 초보자도 이해하기 쉽게 정리합니다.
왜 수신자 목록을 엑셀로 관리하는 방식이 실무에 유리한가
이메일 자동화 초반에는 코드 안에 수신자 주소를 직접 적는 방식으로도 충분히 연습할 수 있습니다. 하지만 실제 업무에서는 발송 대상이 고정되어 있지 않은 경우가 많습니다. 어떤 날은 팀원 3명에게 보내고, 어떤 날은 협력업체 10곳에 보내야 하며, 또 어떤 경우에는 특정 조건에 맞는 사람만 골라서 보내야 합니다. 이때 수신자 정보를 코드에 직접 적어두면 수정할 때마다 파일을 열어야 하고, 주소를 잘못 지우거나 쉼표를 빼먹는 식의 실수가 생기기 쉽습니다.
엑셀로 수신자 목록을 관리하면 이런 문제가 많이 줄어듭니다. 이름, 이메일 주소, 부서, 발송 여부 같은 항목을 열로 정리해두면 누가 발송 대상인지 한눈에 확인할 수 있고, 나중에 조건별로 걸러내는 작업도 쉬워집니다. 예를 들어 “영업팀만 발송”, “발송 여부가 Y인 사람만 발송”, “이메일 주소가 비어 있지 않은 행만 사용” 같은 실무형 확장도 가능합니다. 즉, 엑셀을 수신자 관리표로 쓰면 이메일 자동화가 단순한 코드 실행에서 끝나지 않고 실제 운영 가능한 구조로 바뀝니다.
또 하나 중요한 점은 유지보수입니다. 메일을 보내는 사람이 꼭 코드를 이해하는 사람만 있는 것은 아닙니다. 수신자 목록이 엑셀로 정리되어 있으면, 코드를 모르는 사람도 주소를 수정하거나 추가할 수 있습니다. 실무 자동화는 만드는 것보다 관리가 더 중요할 때가 많습니다. 그래서 엑셀을 입력 파일처럼 사용하는 방식은 초보자에게도 좋고, 나중에 업무에 붙일 때도 훨씬 안정적입니다.

엑셀 수신자 목록을 불러와 메일 보내는 기본 코드 구조
이제 가장 기본적인 흐름을 보겠습니다. 먼저 엑셀 파일에 수신자 목록을 준비합니다. 예를 들어 아래처럼 간단하게 구성하면 됩니다. 첫 번째 열은 이름, 두 번째 열은 이메일 주소, 세 번째 열은 발송 여부입니다. 발송 여부 열은 나중에 특정 사람만 선택해서 보내고 싶을 때 유용합니다.
예시 엑셀 열 구성
이름 / 이메일 / 발송여부
파이썬에서는 보통 pandas를 사용해 이 엑셀 파일을 읽습니다. 그런 다음 각 행을 하나씩 확인하면서 이메일 주소가 있고, 발송 여부가 Y인 사람에게만 메일을 보내도록 만들 수 있습니다.
아래 코드는 흐름을 이해하기 쉽게 주석을 넣어 정리한 예시입니다.
import pandas as pd
import smtplib
from email.mime.text import MIMEText
# 1. 엑셀 파일 읽기
# 파일명은 실제 저장한 엑셀 파일명으로 바꿉니다.
df = pd.read_excel("receiver_list.xlsx")
# 2. 보내는 사람 메일 정보
sender_email = "your_email@example.com"
sender_password = "your_password"
# 3. 공통 제목과 본문
subject = "[업무안내] 수신자 목록 기반 발송 테스트"
# 메일 서버 연결
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls() # 보안 연결 시작
server.login(sender_email, sender_password)
# 4. 엑셀의 각 행을 하나씩 확인하면서 발송
for index, row in df.iterrows():
name = row["이름"]
email = row["이메일"]
send_yn = row["발송여부"]
# 이메일 주소가 비어 있거나 발송여부가 Y가 아니면 건너뜁니다.
if pd.isna(email) or send_yn != "Y":
continue
# 사람마다 이름을 넣어 본문을 조금 다르게 만들 수 있습니다.
body = f"""
{name}님, 안녕하세요.
업무 안내 메일을 전달드립니다.
내용 확인 후 필요한 사항이 있으면 회신 부탁드립니다.
감사합니다.
"""
# 메일 메시지 생성
message = MIMEText(body, _charset="utf-8")
message["Subject"] = subject
message["From"] = sender_email
message["To"] = email
# 메일 발송
server.sendmail(sender_email, email, message.as_string())
print(f"{name} ({email}) 발송 완료")
# 5. 메일 서버 종료
server.quit()
이 코드에서 초보자가 꼭 이해해야 할 부분은 세 가지입니다.
첫째, pd.read_excel()이 엑셀 파일을 읽는 역할을 한다는 점입니다.
둘째, for index, row in df.iterrows()가 엑셀의 각 행을 한 줄씩 꺼내는 반복문이라는 점입니다.
셋째, if pd.isna(email) or send_yn != "Y": 조건으로 발송 대상을 걸러낼 수 있다는 점입니다.
즉, 엑셀을 단순한 주소 목록이 아니라 발송 기준표처럼 사용할 수 있다는 뜻입니다.
실행 전에 주의할 점도 있습니다.
열 이름은 코드와 엑셀에서 완전히 같아야 합니다. 예를 들어 엑셀에는 “이메일주소”라고 되어 있는데 코드에서는 “이메일”이라고 쓰면 오류가 납니다. 또한 처음에는 실제 발송 대상이 아니라 본인 메일 주소만 넣은 테스트 파일로 먼저 확인하는 편이 안전합니다.
자동 발송은 편리하지만, 한 번 잘못 실행하면 여러 명에게 동시에 오발송될 수 있으므로 테스트 습관이 매우 중요합니다.
엑셀을 함께 쓰면 이메일 자동화가 실제 업무 도구로 바뀝니다
파이썬 이메일 자동화가 실무에서 진짜 편리해지는 시점은 수신자를 코드가 아니라 외부 파일에서 관리하기 시작할 때입니다. 그중에서도 엑셀은 가장 익숙하고 수정이 쉬운 도구이기 때문에, 초보자에게 특히 잘 맞습니다. 수신자 주소를 코드 안에 직접 넣는 단계는 연습용으로는 괜찮지만, 실제 업무에서는 변경 사항이 생길 때마다 코드 수정이 필요하다는 점에서 한계가 분명합니다. 반면 엑셀 기반 발송은 수신자 관리와 발송 로직을 분리할 수 있어 훨씬 실용적입니다.
이번 글에서는 가장 기본적인 구조만 다뤘지만, 여기서 확장할 수 있는 방향은 많습니다. 예를 들어 부서별로 다른 제목을 넣을 수도 있고, 이름에 따라 본문 문구를 조금씩 바꿀 수도 있습니다. 발송 여부 열 대신 날짜 조건, 상태값, 담당자 구분 열을 활용하면 특정 대상만 골라 보내는 자동화도 가능합니다. 즉, 엑셀 수신자 목록을 사용하는 방식은 단순히 편한 정도가 아니라, 이후 자동화 확장을 위한 기반이 됩니다.
함께보면 좋은 글
업무 자동화. 파이썬 이메일 본문 내용 자동화 - 입문
이메일 자동 발송을 시작한 뒤 가장 먼저 부딪히는 문제는 제목과 본문을 매번 다시 쓰는 일입니다. 여기에 수신자가 여러 명으로 늘어나면 복사와 붙여넣기, 이름 수정, 발송 확인까지 반복되
heeday4753.com
업무 자동화. 파이썬 이메일 자동 발송 - 입문
직장에서 반복적으로 보내는 보고 메일은 단순해 보이지만, 매번 제목을 수정하고 본문을 붙여넣고 수신자를 확인하는 과정에서 생각보다 많은 시간이 빠져나갑니다. 특히 주간 보고, 일일 현
heeday4753.com
'업무 자동화' 카테고리의 다른 글
| 업무 자동화. 파이썬 날짜 별 보고서 자동 첨부 - 실무 (0) | 2026.04.21 |
|---|---|
| 업무 자동화. 파이썬 이메일 첨부파일 자동 넣기 - 실무 (1) | 2026.04.20 |
| 업무 자동화. 파이썬 이메일 본문 내용 자동화 - 입문 (0) | 2026.04.10 |
| 업무 자동화. 파이썬 이메일 자동 발송 - 입문 (0) | 2026.04.09 |
| 파이썬 엑셀 열이름 통일법 (0) | 2026.04.06 |