아래와 같은 상황이 발생하여 이를 해결하고자 스크립트를 작성하였습니다.
비슷한 경우에 있으신 분은 아래 스크립트를 참고하시기 바랍니다.
[상황]
메일을 받아서 다른 이메일 주소로 포워딩 해줘야 함.
하지만 사용자 홈디렉토리에 .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
# systemctl restart incrond
스크립트 내용을 작성합니다.
도착한 메일의 수신자를 수정하고 포워딩 하는 부분입니다.
그리고 메일이 쌓이면 쌓인만큼 여러개의 메일이 포워딩 되므로 포워딩 처리한 메일은 삭제해주는 것이 좋습니다.
# vi /root/run.sh
#!/bin/bash
date >> /root/result.txt echo "스크립트 시작" >> /root/result.txt
# 쓰기 종료 확인시 진행 while : do
# 메일 쓰기 종료 대기 sleep 3
# 시간 비교 time_close=`stat -c %Y /var/spool/mail/sysdocu` time_now=`date +%s` time_diff=`expr $time_now - $time_close`
# 메일 처리 if [ "$time_diff" -gt "2" ]; then
cat /var/spool/mail/sysdocu >> /root/sysdocu # 백업 sed -i "s/^To: .*$/To: sysdocu@tistory.com/" /var/spool/mail/sysdocu # 수신자 변경 cat /var/spool/mail/sysdocu |formail -s sendmail sysdocu@tistory.com # 포워딩 cat /dev/null > /var/spool/mail/sysdocu # 비우기 systemctl restart incrond # 파일이벤트 준비 (IN_ONESHOT 때문에 재시작 필요) echo "메일 포워딩 완료" >> /root/result.txt # 결과 기록 echo "" >> /root/result.txt exit 0
else echo "파일쓰기 종료 대기중" >> /root/result.txt fi
done
|
* /var/spool/mail/sysdocu : 사용자 이름의 메일함 (메일 파일)
* sysdocu@tistory.com : 넘겨받는 메일 계정
# chmod 700 /root/run.sh
이제 외부에서 sysdocu@sysdocu.com 로 메일을 보내면
sysdocu@tistory.com 이 받는것처럼 보여집니다.