- 바탕화면의 send_mail.ps1 파일을 메모장으로 다시 엽니다.
# 맨 위에 한글 깨짐 방지 설정을 추가합니다.
$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# --- 설정 정보 입력 ---
$Username = "p****@gmail.com" # 본인의 지메일 주소
$Password = "&&&& **** d**c t**q" # 발급받은 16자리 앱 비밀번호
$To = "c****@a***.or.kr" # 받는 사람 주소
$Subject = "파워셀 테스트 메일입니다."
$Body = "이 메일은 PowerShell 스크립트를 통해 자동 발송되었습니다."
# --- 패스워드 암호화 및 크레덴셜 생성 ---
$SecPassword = ConvertTo-SecureString $Password -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ($Username, $SecPassword)
# --- SMTP 서버 설정 (정상 주소로 수정 완료) ---
$SmtpServer = "smtp.gmail.com"
$Port = 587
# --- 메일 객체 생성 ---
$MailMessage = New-Object System.Net.Mail.MailMessage
$MailMessage.From = $Username
$MailMessage.To.Add($To)
$MailMessage.Subject = $Subject
$MailMessage.Body = $Body
$MailMessage.IsBodyHtml = $false
# --- SMTP 클라이언트 설정 ---
$SmtpClient = New-Object System.Net.Mail.SmtpClient($SmtpServer, $Port)
$SmtpClient.EnableSsl = $true
$SmtpClient.Credentials = $Credential.GetNetworkCredential()
# --- 송신 및 상태 확인 (Try-Catch) ---
try {
Write-Host "메일을 전송 중입니다..." -ForegroundColor Cyan
$SmtpClient.Send($MailMessage)
# 송신 성공 상태 출력
Write-Host "[성공] 메일이 'smtp.gmail.com' 서버로 정상 전송되었습니다!" -ForegroundColor Green
Write-Host "전송 시각: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Green
}
catch {
# 송신 실패 상태 및 에러 메시지 출력
Write-Host "[실패] 메일 발송 중 오류가 발생했습니다." -ForegroundColor Red
Write-Host "오류 원인: $($_.Exception.Message)" -ForegroundColor Red
}
finally {
# 리소스 해제
if ($MailMessage) { $MailMessage.Dispose() }
if ($SmtpClient) { $SmtpClient.Dispose() }
}
- 메모장 상단 메뉴에서 [파일] -> [다른 이름으로 저장]을 누릅니다.
- 파일 이름을 send_mail.ps1로 지정하고, 아래쪽의 인코딩(Encoding) 옵션을 반드시 UTF-8 또는 ANSI로 선택한 후 저장(덮어쓰기)합니다.
- 파워셀 창으로 돌아와 다시 아래 명령어로 실행합니다.
powershell
.\send_mail.ps1코드를 사용할 때는 주의가 필요합니다.
만약 위 코드로 수정했는데도 초록색 성공 메시지가 안 뜨고 빨간색 에러 메시지가 나온다면, 네트워크 방화벽이 사내망/기업망이라 587번 포트(SMTP)를 차단했을 가능성이 있습니다.
- 웹 브라우저 주소창에 아래 주소를 그대로 입력하거나 클릭하여 이동합니다.
- 본인 확인을 위해 구글 계정 비밀번호를 한 번 더 입력합니다.
- 곧바로 앱 비밀번호 생성 화면이 나타납니다.
- 뒤로 가기를 눌러 이전 화면(보안 첫 화면)으로 이동합니다.
- 아래 이미지에 표시된 가능한 경우 비밀번호 건너뛰기 메뉴를 찾습니다.
- 현재 '사용'으로 되어 있는 체크를 '해제(끄기)'로 변경합니다.
- 설정을 끈 후, 다시 방법 1의 링크로 접속하거나 이 '2단계 인증' 페이지로 돌아와 새로고침(F5)을 하면 맨 아래에 [앱 비밀번호] 메뉴가 마법처럼 나타납니다.
- 설정 방법 요약:
- 지메일 계정 관리에서 2단계 인증을 켭니다.
- 앱 비밀번호를 생성하여 16자리 코드를 준비합니다.
- 아래 파워셀 스크립트를 실행합니다. [1]
- 확인 방법:
- 에러 없이 실행이 완료되면 지메일 SMTP 서버의 정상 접수를 의미합니다.
- 오류 발생 시 SmtpException 등의 에러 로그가 출력됩니다.
- 지메일 '보낸편지함'을 통해서도 발송 내역을 대조할 수 있습니다
해결 방법
일반 지메일(Gmail) 웹사이트나 앱에서 직접 보낼 때는 도착하지 않지만, 파워쉘 스크립트를 이용한 SMTP 발송 방식으로는 성공하는 이유는 메일의 데이터 형식(Format)과 수신 측 기업 메일 서버의 엄격한 스팸/보안 필터링 정책 때문일 가능성이 매우 높습니다.
왜 이런 차이가 발생할까요?
- 메일 형식의 차이 (일반 텍스트 vs HTML): 작성해주신 파워쉘 소스를 보면 $MailMessage.IsBodyHtml = $false로 설정되어 있습니다. 이는 메일을 장식이나 서식이 전혀 없는 순수한 '일반 텍스트(Plain Text)' 형태로 보낸다는 뜻입니다. 반면, 지메일 웹에서 메일을 작성하면 기본적으로 복잡한 HTML 코드가 포함된 서식 있는 메일로 발송됩니다. 공공/기업 메일 서버는 보안 방화벽이 매우 엄격하여, 일반 지메일이 만들어내는 특정 HTML 구조나 숨겨진 태그를 스팸이나 보안 위협으로 오인해 자체 서버에서 차단(Drop)했을 수 있습니다.
- 서명 및 숨은 링크 유무: 본인의 지메일 설정에 이미지, 회사 로고, URL 링크 등이 포함된 자동 '서명'이 켜져 있을 수 있습니다. 기업 스팸 필터는 외부망에서 들어오는 메일에 링크나 이미지가 포함되어 있으면 피싱(Phishing)이나 스팸으로 간주하여 차단 점수를 높게 매깁니다. 파워쉘 스크립트는 이런 부가 정보 없이 글자만 보내기 때문에 필터를 무사히 통과한 것입니다.
- 메일 헤더(Header) 구조의 차이: 지메일 웹/앱을 통해 발송할 때와 앱 비밀번호를 이용해 SMTP 클라이언트(파워쉘)로 발송할 때 이메일에 기록되는 발송 경로 및 메일 헤더 정보가 미세하게 다릅니다. 기업 메일 방화벽의 특정 룰(Rule)에 지메일 웹 발송 헤더가 걸렸을 수 있습니다.
지메일 웹/앱에서 발송해도 정상적으로 수신하게 하는 방법
파워쉘 발송 방식과 최대한 동일한 조건을 지메일에서도 만들어 주면 통과할 확률이 높습니다. 다음 방법들을 시도해 보시기 바랍니다.
1. 지메일에서 '일반 텍스트 모드'로 전환해서 보내기 (가장 추천) 이 방법이 파워쉘의 $false 설정과 동일한 효과를 냅니다.
- 지메일에서 [편지쓰기] 버튼을 누릅니다.
- 새 메시지 작성 창 하단의 점 3개 아이콘(옵션 더보기)을 클릭합니다.
- 메뉴에서 '일반 텍스트 모드'를 클릭하여 체크 표시(✓)가 나타나게 합니다.
- 메일 내용에 이미지나 첨부파일 없이 텍스트만 작성하여 발송해 봅니다.
2. 자동 서명 및 링크 제거 지메일 환경설정에서 본문 하단에 자동으로 들어가는 서명(특히 명함 이미지나 웹사이트 링크)이 있다면, 해당 수신자에게 보낼 때만큼은 서명을 모두 지우고 발송해 보세요.
3. 수신자 측 스팸 메일함 확인 메일이 서버 중간에서 아예 증발한 것이 아니라, 웹메일 시스템 내의 스팸함이나 정크함으로 조용히 분류되고 있을 수 있습니다. 수신 측사용자에게 스팸 편지함을 확인해 달라고 요청해 보세요.
4. 사내 IT 부서에 수신 허용(화이트리스트) 등록 요청 위의 방법을 모두 사용해도 지메일 웹에서 보낸 메일만 계속 도착하지 않는다면, 메일 보안 솔루션(스팸 필터)이 지메일 웹 발송 트래픽 중 특정 패턴을 영구적으로 차단하고 있는 것입니다. 이 경우 수신자가 사내 전산팀/IT보안팀에 연락하여 발송자 주소를 수신 허용(화이트리스트)으로 등록해 달라고 요청해야만 근본적으로 해결됩니다.
지메일 앱 통해 발송하면 일반테스트모드, 서명 제거하고 보내도 실패.
쉘스크립트는 587 포트이고, 메일 앱에서 장애 Reason은 553이다.
원인과 해결방법을 알려줘
제공해주신 단서들을 종합해 보면, 이 문제는 발신자(본인)의 메일 작성 방식(텍스트 모드, 서명 유무)의 문제가 아니라 수신 측메일 방화벽의 엄격한 IP 및 정책 차단(553 에러) 때문입니다.
같은 지메일 계정임에도 앱에서는 실패하고 파워쉘(포트 587)에서는 성공하는 원인과 해결 방법은 다음과 같습니다.
원인 분석
- 발송 서버 IP 대역의 차이 (가장 유력)
- 지메일/다우오피스 앱 발송: 앱이나 웹을 통해 메일을 보내면 구글이나 다우오피스의 '대규모 공용 발송 서버 IP'를 거쳐 전송됩니다. 이러한 공용 IP는 전 세계 수많은 사용자가 함께 쓰기 때문에, 누군가 스팸을 보내면 해당 IP 대역 전체가 공공기관/기업의 실시간 스팸 차단 리스트(RBL)에 등록되어 자동 차단(553 Blocked)되는 경우가 빈번합니다.
- 파워쉘 발송: 파워쉘에서 smtp.gmail.com (포트 587, 인증 포함)을 통해 클라이언트 단에서 직접 발송하면, 웹/앱에서 발송할 때와는 다른 발송 서버(IP) 라우팅 경로를 타게 됩니다. 이 경로의 IP는 차단 리스트에 올라가지 않은 '깨끗한 IP'였기 때문에 방화벽을 무사히 통과한 것입니다.
- 메일 헤더(Header) 구조 필터링
- 앱을 통해 메일을 보내면 사용 중인 기기 정보, 앱 식별 정보(User-Agent) 등 복잡한 메타데이터가 메일 내부에 숨겨진 채 전송됩니다. 수신측의 보안 시스템(스팸 필터)이 특정 앱이 만들어내는 헤더 구조를 보안 위협으로 간주하여 기계적으로 차단했을 수 있습니다. 반면, 파워쉘은 이런 불필요한 꼬리표 없이 아주 단순한 최소한의 규격으로만 메일을 발송하여 필터 룰을 우회한 것으로 보입니다.
해결 방법
이 현상은 수신자측의 서버에서 문을 닫아건 상태이므로, 발신자 측에서 앱 설정을 변경하는 것으로는 해결할 수 없습니다. 다음과 같이 조치해야 합니다.
- 수신자 측 IT 부서에 화이트리스트 등록 요청 (유일한 근본 해결책) 수신자에게 유선 전화나 메신저로 연락하여 상황을 알리고 조치를 부탁해야 합니다.
- "지메일과 회사 메일로 메일을 보내면 수신자 보안 시스템에서 'Reason: 553 Blocked' 에러를 띄우며 차단하고 있습니다. 사내 IT/전산팀에 제 메일 주소들을 수신 허용(화이트리스트)으로 등록 필요
- 사내 전산팀(다우오피스 관리자)에 장애 접수 회사 메일발송 실패 건에 대해 사내 전산 담당자에게 리포팅하세요. 다우오피스 발송 서버 IP가 수신자 방화벽에 차단된 상태이므로,발송자 측에서 수신자 측에 'IP 차단 해제'를 공식적으로 요청해야 합니다.
'프로그램 개발(분석, 설계, 코딩, 배포) > 100. 기타' 카테고리의 다른 글
| eml파일을 불러들일 수 있는 오픈소스 이메일 클라이언트 (0) | 2026.10.05 |
|---|---|
| "2025. 2. 6. 10:00 끝." 에서 시간(10:00) 뒤에는 점(.)을 안붙이나? (0) | 2026.10.01 |
| GraphRAG (0) | 2026.09.12 |
| 그래프DB (0) | 2026.09.12 |
| 동양고전 (0) | 2026.08.26 |