맥에서 터미널을 열었을 때 You have new mail 메시지가 표시되는 이유는 macOS 내부의 유닉스 시스템 메일 스풀에 읽지 않은 메시지가 쌓여 있기 때문입니다. 메일 스풀은 /var/mail/<사용자명> 경로에 위치하는 로컬 텍스트 파일로, 시스템 프로세스가 발송한 메시지를 임시 저장하는 공간입니다.
Gmail이나 iCloud 메일과는 무관한 유닉스 메일 전용 알림이며 이 시스템 메일은 대부분 cron job 실행 결과나 오류를 자동으로 전송한 것입니다.
MAMP 같은 로컬 개발 환경을 설치했거나, crontab으로 예약 작업을 등록한 적이 있다면 관련 메시지가 해당 경로에 누적됩니다.
You have new mail은 왜 나타나는가?
macOS는 유닉스 기반 운영체제로, 시스템 프로세스가 관리자에게 결과를 보고할 때 로컬 메일 스풀을 사용합니다. zsh 셸은 시작 시 /var/mail/<사용자명> 파일을 확인해 읽지 않은 메시지가 있으면 이 메시지를 출력합니다.
발송 주체는 크게 세 가지로 나뉩니다.

cron 데몬 : cron은 지정한 시각에 명령어나 스크립트를 자동 실행하는 유닉스 작업 스케줄러입니다. crontab에 등록된 작업이 실행되면 표준 출력과 오류 내용을 자동으로 시스템 메일로 전송합니다. 작업이 정상 완료돼도 출력이 있으면 메일이 생성됩니다.
시스템 프로세스 : macOS 내부의 백그라운드 서비스가 경고나 상태 변경을 보고할 때 사용됩니다.
로컬 개발 도구 : MAMP, Homebrew 설치 스크립트, Apache 등의 설정 과정에서 sendmail 인터페이스를 통해 발송되는 경우도 있습니다. sendmail은 유닉스 계열 시스템에서 로컬 메일을 전달하는 MTA(메일 전송 에이전트)로, 외부 메일 서버 없이 /var/mail에 직접 기록합니다.
터미널에서 시스템 메일을 확인하는 방법
시스템 메일 내용을 확인하려면 macOS 내장 mail 클라이언트를 사용합니다. 터미널에 아래 명령어를 입력하면 됩니다.

mail
실행하면 /var/mail/<사용자명> 경로에 저장된 메시지 목록이 표시됩니다.
Mail version 8.1 6/6/93. Type ? for help.
"/var/mail/username": 3 messages 3 unread
>U 1 username@MacBook Mon Apr 7 09:00 20/869 "Cron <username@MacBook> /usr/local/bin/backup.sh"
U 2 username@MacBook Tue Apr 8 10:30 18/740 "Cron <username@MacBook> find ~/tmp -ctime +7 -delete"
U 3 username@MacBook Wed Apr 9 11:00 22/901 "Cron <username@MacBook> /usr/local/bin/sync.sh"
?
? 프롬프트에서 메시지 번호를 입력하면 내용을 읽을 수 있습니다.
1을 입력하면 첫 번째 메시지, 2를 입력하면 두 번째 메시지가 열립니다. 긴 메시지는 스페이스바로 스크롤하며, q를 누르면 목록으로 돌아갑니다.
메시지 목록을 다시 보려면 h를 입력합니다.
mail 인터페이스에서 빠져나오려면 q를 입력합니다. 삭제 등 변경사항이 있으면 적용 후 종료됩니다. 변경사항을 취소하고 강제 종료하려면 x를 입력하면 됩니다.
시스템 메일을 삭제하는 방법
1. mail 클라이언트에서 일괄 삭제
mail 실행 후 ? 프롬프트에서 아래 명령어를 순서대로 입력합니다.

d *
q
d *는 모든 메시지를 삭제 표시하고, q는 변경사항을 저장하며 종료합니다. 특정 메시지 하나만 삭제하려면 d 1 처럼 번호를 지정하면 됩니다.
q를 입력하지 않으면 삭제가 적용되지 않습니다. mail 진입 없이 한 줄로 처리하려면 아래 명령어를 사용합니다.
mail <<< 'delete *'
<<<는 zsh·bash의 here-string 문법으로, 문자열을 명령어의 표준 입력으로 직접 전달합니다. mail 실행 후 delete *를 입력한 것과 동일하게 동작합니다.
2. 메일 스풀 파일 직접 삭제
mail 클라이언트 없이 스풀 파일 자체를 제거하는 방법입니다. /var/mail 디렉터리는 root 소유이므로 sudo(관리자 권한 실행)가 필요합니다. 아래 명령어에서 username 부분을 실제 사용자명으로 바꿔 입력합니다.
sudo rm /var/mail/username
현재 사용자명은 whoami 명령어로 확인합니다. 파일을 삭제하면 모든 시스템 메일이 즉시 제거되고, 다음 터미널 세션부터 you have new mail 메시지가 표시되지 않습니다.
3. 메일 스풀 파일 비우기 (파일 유지)
파일을 완전히 삭제하는 대신 내용만 지우려면 아래 명령어를 사용합니다.
sudo truncate -s 0 /var/mail/username
truncate -s 0은 파일 크기를 0바이트로 줄이는 명령어입니다. 파일 자체는 남아 있으므로 퍼미션이나 소유자 설정이 유지되며, 시스템 호환성 측면에서 rm보다 안전합니다.
메시지가 반복해서 나타날 때 cron 설정 수정
메일을 삭제해도 같은 메시지가 계속 나타난다면 크론탭에서 메일을 발송하지 않도록 수정해야 합니다.
macOS crontab 설정은 crontab -e 명령어로 진입하며, 기본 편집기(vi 또는 nano)로 등록된 예약 작업 목록이 열립니다. 더 이상 필요 없는 항목을 삭제하면 됩니다.

cron 작업은 유지하면서 시스템 메일 발송만 막으려면 crontab 파일 상단에 MAILTO="" 설정을 추가합니다. 이 변수는 cron이 출력을 전송할 주소를 지정하는 전역 설정으로, 빈 문자열로 설정하면 메일 발송 자체를 비활성화합니다.
MAILTO=""
* * * * * /usr/local/bin/backup.sh
이렇게 하면 출력이 발생해도 시스템 메일로 전송되지 않습니다.
터미널 시작 시 메일 확인 자체를 비활성화하는 방법
메일을 삭제하지 않고 you have new mail 메시지 표시만 끄려면 셸 설정 파일에 환경변수를 추가합니다. 현재 셸을 확인하려면 echo $SHELL을 입력합니다.
zsh(/bin/zsh)라면 아래 명령어를 실행합니다.
echo 'unset MAIL' >> ~/.zshrc
source ~/.zshrc
bash(/bin/bash)라면 ~/.bash_profile에 추가합니다.
echo 'unset MAIL' >> ~/.bash_profile
source ~/.bash_profile
source는 설정 파일을 현재 세션에 즉시 반영하는 명령어입니다. 터미널을 재시작하지 않아도 변경이 적용됩니다.

vi로 직접 편집할 때는 vi ~/.zshrc로 파일을 열고, G로 파일 끝으로 이동한 뒤 o로 새 줄을 추가해 unset MAIL을 입력합니다.
Esc → :wq로 저장하고, source ~/.zshrc로 즉시 반영합니다. unset MAIL 한 줄만 추가하면 되며, 위치는 파일 어느 곳이든 동작합니다.
MAIL 변수를 해제하면 셸이 시작 시 메일 파일을 확인하지 않습니다. 단, 실제 유닉스 메일은 /var/mail/username에 계속 쌓이므로 정기적으로 확인하는 것이 권장됩니다.
마치며
맥 터미널의 you have new mail 메시지는 시스템 오류나 보안 문제가 아니라, cron 작업 등의 백그라운드 프로세스가 남긴 로컬 알림입니다.
mail 클라이언트로 내용을 확인한 뒤 d * → q 순서로 정리하고 메시지가 반복된다면 crontab -e로 원인 작업을 수정하는 것이 근본적인 해결입니다.
FAQ
시스템 메일을 삭제하면 중요한 파일도 함께 삭제되나요?
아닙니다. /var/mail/username 파일은 텍스트 형태의 메시지만 저장합니다. cron 작업 자체나 스크립트 파일에는 영향이 없으며, macOS 앱 데이터와도 무관합니다.
mail 명령어를 실행하면 “No mail for username” 메시지가 나오는데도 you have new mail이 표시됩니다.
스풀 파일이 비어 있으나 퍼미션 문제로 zsh가 파일 존재를 인식하는 경우입니다. ls -la /var/mail/로 파일 상태를 확인하고, 크기가 0이면 sudo rm /var/mail/username으로 파일 자체를 삭제하면 해결됩니다.
cron 작업 없이도 시스템 메일이 쌓이는 이유가 있나요?
macOS의 launchd(macOS 전용 서비스 관리 데몬으로, cron을 대체하는 역할)가 관리하는 에이전트가 오류 발생 시 sendmail 인터페이스를 통해 메시지를 보내는 경우가 있습니다. Homebrew로 설치한 서비스(Apache, MySQL 등)의 시작 스크립트도 발송 주체가 될 수 있습니다.



