
개요
엑셀에서 VBA 매크로를 사용하여 Outlook을 통해 대량의 이메일을 자동으로 발송하는 방법을 소개합니다. 이 코드는 실무에서 바로 활용 가능하며, 발송 결과를 자동으로 기록하고 오류 처리까지 완벽하게 구현되어 있습니다.
주요 기능
- ✅ 대량 이메일 자동 발송: 여러 건의 메일을 한 번에 발송
- ✅ 첨부파일 지원: 각 메일마다 개별 첨부파일 추가 가능
- ✅ 발송 결과 자동 기록: 성공/실패 여부와 시간을 자동으로 엑셀에 기록
- ✅ 에러 처리: 발송 실패 시에도 다음 메일 계속 발송
- ✅ 진행 상황 표시: 상태 표시줄에 실시간 진행률 표시
- ✅ CC 기능: 참조 수신자 추가 가능
엑셀 시트 구조
Mail_Send라는 이름의 시트를 생성하고 다음과 같이 구성하세요:
A열 (To)B열 (CC)C열 (Subject)D열 (Body)E열 (Status)F열 (Attachment)
| 수신자 이메일 | 참조 이메일 | 제목 | 본문 | 발송상태 | 첨부파일 경로 |
예시:
- A2: example@company.com
- B2: cc@company.com (선택사항)
- C2: 11월 업무 보고서 제출 안내
- D2: 안녕하세요. 11월 업무 보고서를 제출해 주시기 바랍니다.
- E2: (비워둠 - 자동으로 채워짐)
- F2: C:\Documents\report.pdf (선택사항)
VBA 코드
| Sub SendEmail_Complete() On Error GoTo ErrorHandler Dim OutlookApp As Object Dim OutlookMail As Object Dim ws As Worksheet Dim LastRow As Long Dim i As Long Dim SuccessCount As Long Dim FailCount As Long ' 초기화 SuccessCount = 0 FailCount = 0 Set ws = ActiveWorkbook.Sheets("Mail_Send") LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 데이터가 없는 경우 처리 If LastRow < 2 Then MsgBox "발송할 데이터가 없습니다.", vbExclamation Exit Sub End If ' 사용자 확인 If MsgBox("총 " & LastRow - 1 & "건의 메일을 발송하시겠습니까?", vbYesNo + vbQuestion, "메일 발송 확인") = vbNo Then Exit Sub End If Set OutlookApp = CreateObject("Outlook.Application") ' 진행 상황 표시를 위한 상태 표시줄 사용 Application.ScreenUpdating = False For i = 2 To LastRow Application.StatusBar = "메일 발송 중... (" & i - 1 & "/" & LastRow - 1 & ")" On Error Resume Next If ws.Cells(i, 1).Value <> "" Then Set OutlookMail = OutlookApp.CreateItem(0) With OutlookMail .To = ws.Cells(i, 1).Value .CC = ws.Cells(i, 2).Value ' CC (선택사항) .Subject = ws.Cells(i, 3).Value .Body = ws.Cells(i, 4).Value ' 첨부파일이 있는 경우 If ws.Cells(i, 6).Value <> "" Then If Dir(ws.Cells(i, 6).Value) <> "" Then .Attachments.Add ws.Cells(i, 6).Value End If End If .Send End With If Err.Number = 0 Then ws.Cells(i, 5).Value = "발송완료 - " & Format(Now, "yyyy-mm-dd hh:mm:ss") ws.Cells(i, 5).Interior.Color = RGB(144, 238, 144) SuccessCount = SuccessCount + 1 Else ws.Cells(i, 5).Value = "발송실패 - " & Err.Description ws.Cells(i, 5).Interior.Color = RGB(255, 182, 193) FailCount = FailCount + 1 Err.Clear End If Set OutlookMail = Nothing End If On Error GoTo ErrorHandler ' 서버 부하 방지를 위한 짧은 대기 시간 Application.Wait (Now + TimeValue("0:00:01")) Next i ' 정리 Application.ScreenUpdating = True Application.StatusBar = False Set OutlookApp = Nothing Set ws = Nothing ' 결과 메시지 MsgBox "메일 발송이 완료되었습니다!" & vbCrLf & vbCrLf & _ "성공: " & SuccessCount & "건" & vbCrLf & _ "실패: " & FailCount & "건", vbInformation, "발송 완료" Exit Sub ErrorHandler: Application.ScreenUpdating = True Application.StatusBar = False MsgBox "오류가 발생했습니다: " & Err.Description, vbCritical Set OutlookMail = Nothing Set OutlookApp = Nothing Set ws = Nothing End Sub |
사용 방법
1. VBA 편집기 열기
- Alt + F11을 눌러 VBA 편집기를 엽니다.
2. 모듈 추가
- 메뉴에서 삽입 > 모듈을 선택합니다.
3. 코드 붙여넣기
- 위의 코드를 복사하여 모듈에 붙여넣습니다.
4. 엑셀 데이터 준비
- Mail_Send 시트에 발송할 이메일 정보를 입력합니다.
5. 매크로 실행
- Alt + F8을 누르고 SendEmail_Complete를 선택하여 실행합니다.
코드 상세 설명
발송 전 확인 기능
vba
If MsgBox("총 " & LastRow - 1 & "건의 메일을 발송하시겠습니까?", vbYesNo + vbQuestion) = vbNo Then
Exit Sub
End If
실수로 대량 발송하는 것을 방지하기 위한 확인 메시지를 표시합니다.
진행 상황 표시
vba
Application.StatusBar = "메일 발송 중... (" & i - 1 & "/" & LastRow - 1 & ")"
엑셀 하단 상태 표시줄에 현재 진행률을 실시간으로 표시합니다.
발송 결과 기록
성공 시:
- E열에 "발송완료" + 시간 기록
- 셀 배경색을 연두색으로 표시
실패 시:
- E열에 "발송실패" + 오류 메시지 기록
- 셀 배경색을 분홍색으로 표시
서버 부하 방지
vba
Application.Wait (Now + TimeValue("0:00:01"))
각 메일 발송 후 1초 대기하여 서버 부하를 방지합니다.
주의사항
- Outlook 설치 필수: 이 코드는 Outlook을 통해 메일을 발송하므로 Outlook이 설치되어 있어야 합니다.
- 메일 서버 설정: Outlook이 메일 계정과 연결되어 있어야 합니다.
- 첨부파일 경로: 첨부파일은 절대 경로로 입력해야 하며, 파일이 실제로 존재해야 합니다.
- 매크로 보안 설정: 매크로가 실행되지 않으면 파일 > 옵션 > 보안 센터 > 매크로 설정에서 허용해야 합니다.
- 대량 발송 시: 일반적으로 하루 발송 제한이 있을 수 있으므로 대량 발송 시 주의하세요.
커스터마이징 팁
HTML 형식 본문 사용
.Body 대신 .HTMLBody를 사용하면 HTML 형식의 메일을 발송할 수 있습니다:
vba
.HTMLBody = ws.Cells(i, 4).Value
대기 시간 조정
서버 상황에 맞게 대기 시간을 조절할 수 있습니다:
vba
Application.Wait (Now + TimeValue("0:00:02")) ' 2초로 변경
시트 이름 변경
다른 시트 이름을 사용하려면 해당 부분을 수정하세요:
vba
Set ws = ActiveWorkbook.Sheets("원하는시트이름")
활용 사례
- 📧 고객 대상 프로모션 메일 발송
- 📊 월간 보고서 자동 배포
- 🎓 교육 자료 일괄 전송
- 💼 업무 공지사항 전달
- 🎂 생일 축하 메시지 자동 발송
문제 해결
"Mail_Send 시트를 찾을 수 없습니다" 오류
- 엑셀 파일에 Mail_Send라는 정확한 이름의 시트가 있는지 확인하세요.
첨부파일이 첨부되지 않음
- 파일 경로가 정확한지 확인하세요.
- 역슬래시(\)를 사용해야 합니다.
- 파일이 실제로 존재하는지 확인하세요.
Outlook이 열리지 않음
- Outlook이 설치되어 있는지 확인하세요.
- Outlook을 한 번 수동으로 실행해보세요.
마치며
이 VBA 매크로를 사용하면 반복적인 이메일 발송 업무를 자동화하여 업무 효율을 크게 높일 수 있습니다. 코드를 자신의 환경에 맞게 수정하여 활용해보세요!