매일공부

[메일 서버] POP3로 해야 하나 SMTP로 해야 하나 — Mailplug 자동 차단 대응기 본문

IT/작업기록

[메일 서버] POP3로 해야 하나 SMTP로 해야 하나 — Mailplug 자동 차단 대응기

julian 2026. 7. 30. 09:15

배경

나스에서 메일 발송이 갑자기 실패하는 일이 생겨서 원인을 찾다가, Mailplug의 "30일간 POP3/IMAP 접속 이력이 없으면 자동 차단" 정책 때문이라는 걸 알게 됐다. 그런데 여기서 헷갈렸던 게 있었다 — 나스 알림 메일은 그동안 계속 잘 보내지고 있었는데 왜 차단이 된 걸까?

POP3 vs SMTP, 뭐가 다른가

  • 메일 발송(나스 알림 메일): SMTP로 이루어짐 — 이건 계속 정상적으로 되고 있었다
  • 자동 차단 정책의 기준: "POP3/IMAP 접속 이력". SMTP 발송 기록은 여기 카운트되지 않는다

즉, SMTP로 메일을 계속 잘 보내고 있었는데도 차단된 이유가 이거였다 — SMTP 발송과 POP3/IMAP 로그인은 서버가 완전히 별개로 취급하기 때문에, 아무리 SMTP로 메일을 잘 보내도 "접속 이력"에는 카운트가 안 된다.

그래서 자동화 스크립트는 반드시 POP3(또는 IMAP)로 로그인해야 한다. SMTP로 아무리 자주 접속해도 이 차단 문제는 해결이 안 된다.

import poplib

pop = poplib.POP3_SSL("메일서버주소", 995)
pop.user("계정")
pop.pass_("비밀번호")
pop.quit()

실제 메일 수신함 내용은 안 건드리고 로그인만 하고 바로 끊기 때문에(pop.user() → pop.pass_() → pop.quit()), 기존 시스템 알림 메일에는 영향이 없다.

이 스크립트, git으로 관리해야 하나?

개발 프로젝트 폴더가 아니라 아예 별도의 보안 폴더로 빼도 괜찮은지 고민했는데, 결론은 "오히려 그게 더 맞는 접근"이었다.

  • 성격 자체가 다름: 이 스크립트는 "개발 프로젝트"가 아니라 인프라 유지보수용 운영 스크립트다. 로직이 바뀔 일도 거의 없고(그냥 로그인만 하는 거라), git으로 버전 관리하며 히스토리를 추적할 가치가 크지 않다
  • 나스 스냅샷이 이미 백업/히스토리 역할을 함: git 히스토리가 필요한 이유는 "코드 변경 이력 추적 + 롤백"인데, 이 정도 스크립트는 나스 스냅샷으로 파일 자체가 통째로 백업되니 그걸로 충분하다
  • 보안 폴더 분리가 오히려 더 안전함: git 저장소(로컬이라도) 안에 비밀번호가 있는 파일을 넣고 .gitignore로 관리하는 것보다, 애초에 git 저장소 범위 밖의 별도 폴더에 두는 게 실수로 커밋될 위험 자체를 원천 차단한다. .gitignore는 사람이 실수로 git add -A 하거나 설정을 건드리면 뚫릴 수 있지만, 애초에 저장소 밖이면 그럴 일이 없다

정리하면:

  • 개발 폴더(git 관리) → 뺀다
  • 보안/운영 스크립트 전용 폴더(git과 무관한 별도 위치) → 여기 두고 나스 스냅샷 정책에 맡긴다

이 폴더는 접근 권한도 관리자 계정만 read 가능하게 별도로 제한해두면 더 안전하다. 스냅샷 정책에 이 폴더가 포함되어 있는지도 확인해둘 것.

스케줄 등록할 때 놓칠 뻔한 함정

시놀로지 스케줄러에 "매월 특정 일자" 옵션이 없어서, "Repeat: First" + 요일 전부(Sun~Sat)를 선택하는 방식으로 "매달 1일 실행"을 흉내 냈다. 모든 요일이 걸리니 그 달의 첫날이 곧 첫 매칭일이 되는 원리로, 방법 자체는 맞다.

그런데 여기서 걸리는 점이 있었다: 정책이 "30일간 접속 이력 없으면 차단"인데, 매달 1일 실행이면 최악의 경우(예: 1월 1일 실행 → 2월 1일 실행) 간격이 31일이 나온다. 30일 기준을 하루 넘겨버리는 것. 31일짜리 달이 연속되면 차단 직전에 아슬아슬하게 걸릴 수도 있다.

안전하게 하려면:

  • Repeat을 Monthly가 아니라 Weekly로 바꾸고 2~3주 간격으로 돌리거나
  • 그냥 매주 돌리는 게 제일 확실하다 (부하도 거의 없는 스크립트라 매주 돌려도 문제없음)

Repeat 드롭다운을 Monthly 대신 Weekly로 바꾸고, 요일 선택에서 원하는 요일 하나만 체크하면 매주 그 요일에 도는 걸로 바뀐다. 30일 기준에 여유를 두고 매주 실행으로 잡는 게 안전하다.

정리

  1. SMTP 발송과 POP3/IMAP 접속 이력은 서버가 완전히 별개로 취급한다 — 발송을 아무리 잘 해도 접속 이력 차단은 못 막는다
  2. 성격이 다른(운영/인프라용) 스크립트는 개발 git 저장소 밖, 별도 보안 폴더 + 스냅샷 정책으로 관리하는 게 더 안전하다
  3. "월 1회" 스케줄을 요일 트릭으로 흉내 낼 때는 실제 간격이 정책 기준(30일)을 넘길 수 있다는 걸 감안해서, 여유 있게 매주/격주로 잡는 게 안전하다
Comments