메일 포워딩 하면서 수신자 이메일 변경하기 (sendmail + incrontab + shell script)
아래와 같은 상황이 발생하여 이를 해결하고자 스크립트를 작성하였습니다.
비슷한 경우에 있으신 분은 아래 스크립트를 참고하시기 바랍니다.
[상황]
메일을 받아서 다른 이메일 주소로 포워딩 해줘야 함.
하지만 사용자 홈디렉토리에 .forward 파일을 만들고 아래와 같이 사용했으나
포워딩 받은 이메일을 열어보니 메일 수신자가 변경되지 않고 그대로 쓰여있음이 확인됨 (sysdocu@sysdocu.com)
sysdocu@sysdocu.com // 사본을 남기기 위해 내 계정 입력 sysdocu@tistory.com // 메일을 포워딩 받을 이메일 주소 |
[목표]
메일 발송 : A >>> B (포워딩) >>> C
메일을 포워딩 하고 받는 사람이 메일을 열었을때 '메일 정보'에서 송신자(A) 이메일 주소는 그대로, 수신자는 최종 수신자(C)의 메일 주소로 되어 있기를 희망
[방법]
icrontab 을 활용하여 /var/mail/sysdocu (메일함) 에 쓰기가 멈추었을때 저장된 메일을
쉘스크립트를 이용해 수신자를 편집하고 포워딩 해주면 됩니다.
여기서는 CentOS 기준으로 작성합니다. Ubuntu 환경에서 구성하는것은 별도 포스팅을 참고해주세요.
(https://sysdocu.tistory.com/1498)
메일이 쓰여진것을 확인하기 위해 파일 감지 패키지를 설치합니다.
# yum -y install incron
부팅시 자동 시작 설정과 현재 데몬을 구동합니다.
# systemctl enable incrond
# systemctl start incrond
파일 이벤트 (쓰기) 가 발생 되었을때 /root/run.sh 스크립트를 실행하도록 합니다.
한 통의 메일을 받더라도 IN_CLOSE_WRITE 이벤트가 빈번히 일어나므로 IN_ONESHOT 을 이용해 1회만 실행하도록 합니다.
나중에 스크립트에서 모든 처리가 완료되면 incrond 데몬을 재시작 하도록 했습니다.
# incrontab -e
/var/spool/mail/sysdocu IN_CLOSE_WRITE,IN_ONESHOT /root/run.sh |
root 사용자의 incron 작업을 허용하고 적용해줍니다.
# vi /etc/incron.allow
root |
# systemctl restart incrond
스크립트 내용을 작성합니다.
도착한 메일의 수신자를 수정하고 포워딩 하는 부분입니다.
그리고 메일이 쌓이면 쌓인만큼 여러개의 메일이 포워딩 되므로 포워딩 처리한 메일은 삭제해주는 것이 좋습니다.
# vi /root/run.sh
#!/bin/bash date >> /root/result.txt |
* /var/spool/mail/sysdocu : 사용자 이름의 메일함 (메일 파일)
* sysdocu@tistory.com : 넘겨받는 메일 계정
# chmod 700 /root/run.sh
이제 외부에서 sysdocu@sysdocu.com 로 메일을 보내면
sysdocu@tistory.com 이 받는것처럼 보여집니다.
'리눅스 > Mail' 카테고리의 다른 글
Sendmail dns=5.6.0, stat=Data format error 해결 방법 (0) | 2023.01.05 |
---|---|
쉘스크립트를 이용한 메일 IP 평판 확인하기 (block list 등록 여부) (0) | 2021.12.21 |
command line 명령어로 메일 보내기 (php) (0) | 2020.02.20 |
command line 명령어로 메일 보내기 (mail) - 한글 제목 불가 (0) | 2020.02.20 |
command line 명령어로 메일 보내기 (sendEmail) - 한글 제목 불가 (0) | 2019.07.10 |