나는 로컬 FreeBSD 컴퓨터에서 SSTMP를 사용하여 일부 cron 작업 등의 출력을 동일한 컴퓨터(또는 도메인)에서 호스팅되지 않는 "실제" 기본 이메일 계정으로 보냈습니다. 예를 들어, 다음과 같이 일일 크론 작업을 설정했습니다.
smartctl -a /dev/ada0 | grep overall-health | mail -s "Silicon daily smartctl" [email protected]
메시지가 내 "실제" 이메일 계정으로 성공적으로 전송되는 한 이는 훌륭하게 작동합니다. 그러나 이메일을 보낼 때마다 "실제" 이메일 계정의 메일 시스템에서 수많은 경고와 반송 메일을 받기도 합니다.
나는 내 SSMTP와 내 "실제" 이메일 계정 호스트 간의 대화를 보여주는 mail
"장황한" 플래그가 있다는 것을 발견했습니다 . -v
나는 그것을 시도해 보았고 다음과 같은 흥미로운 부분을 발견했습니다.
[->] RCPT TO:<[email protected]>
[<-] 250 Accepted
[->] RCPT TO:</usr/local/sbin/[email protected]>
[<-] 250 Accepted
[->] RCPT TO:<[email protected]>
[<-] 250 Accepted
[->] RCPT TO:</usr/local/sbin/[email protected]>
[<-] 250 Accepted
[->] RCPT TO:<[email protected]>
[<-] 250 Accepted
그렇다면 SSMTP는 메시지가 의도한 수신자에게만 전송되는 것이 아니라 다른 세 개의 주소에도 전송되어야 한다고 말하는 것인가요? 그 중 하나가 특히 이상해 보입니다("/usr/local/sbin/[이메일 보호됨]”) 그리고 어떤 이유로 사람들은둘RCPT TO 라인.
이러한 "추가" RCPT TO 라인이 어디서 나오는지 모르겠습니다. 누구든지 어떤 아이디어가 있습니까? 감사해요.
내 /usr/local/etc/ssmtp/ssmtp.conf의 내용:
[email protected]
mailhub=mail.vesterman.com:465
rewriteDomain=vesterman.com
hostname=silicon.vestertopia.net
FromLineOverride=YES
UseTLS=YES
[email protected]
AuthPass=hunter2
답변1
나는 그것을 알아 내고 고쳤습니다.
나는 ssmtp
어떤 상황에서 무언가에 대한 RCPT TO 행을 추가하는지 알아내려고 소스 코드를 살펴보았습니다. 그런 다음 ssmtp
호출할 때 어떤 명령줄 인수가 사용되었는지 알아내려고 했습니다 . 나는 그 호출이 다소 이상해 보이는 명령줄 인수 mail
로 이루어졌음 을 발견했는데, 이는 "추가" RCPT TO 행에 해당하는 것 같았습니다.ssmtp
# ps -jdp 63097 -ww 999
USER PID PPID PGID SID JOBC STAT TT TIME COMMAND
root 63097 62987 63097 60346 1 I 1 0:00.09 -su (bash)
root 36939 63097 36939 60346 1 S+ 1 0:00.00 - mail -vs aojg [email protected]
root 38014 36939 36939 60346 1 S+ 1 0:00.01 `-- sendmail send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp -i -v [email protected] (ssmtp)
/etc/mail/mailer.conf
나는 이 파일이 "추가" RCPT TO 행과 많이 겹치기 때문에 한동안 회의적이었습니다 . 다음과 같습니다.
sendmail /usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp
mailq /usr/local/sbin/ssmtp
newaliases /usr/local/sbin/ssmtp
hoststat /usr/bin/true
purgestat /usr/bin/true
…하지만 내가 "~처럼 보인다"라고 말할 때는 문자 그대로 놀랍게도 뜻을 내포하고 있습니다. 제가 cat
이런 일이나 그런 일을 할 때의 모습은 이렇습니다 nvim
. 그런데 mail
첫 번째 줄 시작 부분의 "sendmail" 외에도 처음 세 줄을 통과했다는 사실이 나를 더 자세히 보게 만들었다.
비록 그것이 밝혀졌지만것 같다6개의 개별 라인처럼 실제로는 4개의 라인입니다. 처음 세 개의 의사 행은 EOL로 구분되지 않습니다. 대신 공백으로 구분됩니다(따라서 실제로는 한 줄입니다). nvim
이것이 별도의 줄인 것처럼 표시되는지 아니면 단지 우연의 일치인지는 알 수 없습니다 (공백의 수는 "완벽한" 줄 바꿈을 초래하는 수와 정확히 같습니다).
그래서 .it mail
를 호출하고 싶습니다. .it 에서 행을 sendmail
찾습니다 . 그런 다음 해당 줄의 모든 항목(처음에 있는 "sendmail" 자체 제외)을 호출해야 하는 호출이라고 생각합니다 . 이랬어야 했는데 , 공간의 이상함으로 인해 이렇게 되어버렸다 .sendmail
mailer.conf
sendmail
/usr/local/sbin/ssmtp
/usr/local/sbin/ssmtp send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp
즉, 실행 파일은 명령줄 인수(법적 이유로 추가된 추가 인수 포함)를 사용하여 mail
호출됩니다 ./usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp
마지막으로, sendmail
4개의 시작 매개변수 각각이 전송될 이메일 주소인지 결정하고, 어떤 이유로든 각 주소에 "@vesterman.com"을 추가합니다.
mailer.conf
애초에 파일이 왜 이런 상태인지에 대해서는 , 아마도 비극적인 복사-붙여넣기 사고가 발생했을 것이라고 믿습니다.