반응형
실무 자동화 (12편): 클릭 한 번으로 "거래처별 대량 메일 자동 발송" (Outlook 연동)
안녕하세요, 물류 현장의 지루한 반복 작업을 코딩으로 박멸하는 '칵칵'입니다. ☕
매일 오후, 수십 곳의 거래처에 각각 다른 명세서나 안내 메일을 보내고 계신가요? 엑셀 리스트를 보고 Outlook을 열어 주소 복사, 제목 입력, 본문 수정... 이 과정을 50번 반복하다 보면 어느새 퇴근 시간은 저 멀리 사라지죠. 오늘은 버튼 클릭 한 번으로 수백 통의 메일을 순식간에 쏘아 올리는 VBA 마법을 공유합니다.
🛠 Outlook 메일 자동 발송 VBA 코드
Sub SendBulkEmails()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim i As Long, lastRow As Long
Set OutlookApp = CreateObject("Outlook.Application")
' 1. 현재 시트의 데이터 마지막 줄 찾기
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2. 반복문 실행 (2행부터 마지막행까지)
For i = 2 To lastRow
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = Cells(i, 2).Value ' B열: 수신자 주소
.Subject = Cells(i, 3).Value ' C열: 메일 제목
.Body = Cells(i, 4).Value ' D열: 메일 본문
' .Attachments.Add "C:\파일경로\첨부파일.pdf" ' 첨부파일 필요 시 주석 해제
.Display ' 3. 메일창 띄우기 (즉시 발송하려면 .Send 로 변경)
End With
Set OutlookMail = Nothing
Next i
MsgBox "모든 메일 작성이 완료되었습니다! 확인 후 발송하세요."
End Sub
💡 코드 핵심 해설 (실무 포인트)
- CreateObject("Outlook.Application"): 엑셀에서 Outlook 프로그램을 강제로 제어할 수 있게 연결해 주는 명령입니다.
- .To / .Subject / .Body: 엑셀의 각 열에 입력된 정보를 메일의 수신자, 제목, 내용으로 정확히 매칭합니다.
- .Display vs .Send: 처음에는
.Display를 써서 메일이 잘 만들어졌는지 눈으로 확인하세요. 완벽하다면.Send로 바꿔서 클릭 한 번에 전송까지 끝낼 수 있습니다.
⚠️ 칵칵의 포인트 해설: 여기서 실수하면 큰일 납니다!
- 실수 1: Outlook 실행 상태 - 이 매크로를 돌리기 전, 반드시 Outlook 프로그램이 켜져 있어야 합니다. 안 그러면 런타임 오류가 발생합니다.
- 실수 2: 보안 경고창 - 외부 프로그램이 메일을 보내려 할 때 보안 알림이 뜰 수 있습니다. 회사 보안 설정에 따라 확인 버튼을 수동으로 눌러야 할 수도 있습니다.
- 실수 3: 잘못된 주소 형식 - 이메일 주소에
@가 빠지거나 오타가 있으면 매크로가 중간에 멈춥니다. 실행 전 **[공백 제거]**와 주소 체크는 필수입니다! - 실수 4: 대량 발송의 위험 - 수백 통을 1초 만에
.Send로 보내면 스팸 서버로 오인받아 계정이 차단될 수 있습니다. 20~30통 단위로 끊어서 발송하는 것을 권장합니다.
다음 엑셀 이야기 예고: 「엑셀 VBA (12편): 조건에 맞는 데이터만 PDF로 변환하여 자동 저장하기」
반응형
'코딩으로 시간 벌기 > 엑셀 VBA' 카테고리의 다른 글
| 실무 자동화 (11편): 조건에 맞는 데이터만 "PDF로 자동 변환" 하여 저장하기 (0) | 2026.03.31 |
|---|---|
| 실무 자동화 (10편): 조건에 맞는 데이터만 골라 시트별로 자동 분리하기 (0) | 2026.03.26 |
| 실무 자동화 (9편): 1시간 노가다를 1초로 - 여러 파일 하나로 합치기 (0) | 2026.03.24 |
| 여덟 번째 이야기: 수천 줄 데이터에서 '원하는 것'만 쏙 뽑아내기 (0) | 2026.03.22 |
| 일곱 번째 이야기: 보고서 자동화의 기초, 주소 지정의 기술 (0) | 2026.03.17 |
