내 Raspberry Pi가 ssmtp/mail-utils를 사용하여 이메일을 보낼 수 없는 이유를 해결하려고 하여 Pi용 Gmail 계정을 열었습니다. 놀랍게도 읽지 않은 이메일이 15,000개 있습니다. 이메일 주소 "pi@pi_name"으로 이메일을 보내려고 했지만 분명히 거부되었습니다(다음으로 보내려고 했습니다).[이메일 보호됨]). 이러한 이메일/거부는 대략 몇 분마다 발생합니다. 거부는 한 가지이지만(잘못 구성한 것이 틀림없습니다) 여기서 무슨 일이 일어나고 있는지 혼란스럽습니다. 내 시스템에는 crontab -u pi -l
다음이 있습니다(루트의 crontab은 비어 있음).
30 8 * * * python /.../text.py
* * * * * python /.../record.py
text.py는 매일 8시 30분에 나에게 알림을 보내야 하고, Record.py는 오디오를 녹음하기 위해 1분마다 실행되어야 합니다. 전송된 이메일에서 이메일 본문은 Record.py(녹음된 오디오 세부정보)의 출력입니다. 내 직감으로는 이러한 이메일이 1분마다 실행되는 크론 작업과 관련되어 있지만(이 이메일은 약 3분마다 전송됨), Record.py 어디에도 이메일 전송에 대한 언급이 없으며 단지 MySQL 데이터베이스에 쓰는 것뿐입니다. text.py 명령을 사용하여 이메일 보내기echo “body” | mail -s “subject” [email protected]
나는 여기서 무슨 일이 일어나고 있는지 혼란스러워합니다. 이 이메일이 어디서 전송되는지 전혀 알 수 없으며, 올해 1월에는 모든 것이 예상대로 작동하고 있었으며(몇 달간 해외에 있는 동안 Pi를 보관해 두었습니다), 아무런 변경도 하지 않았습니다. .
또한 이상하고 관련된 것은 python text.py 명령을 입력하면 무작위로 작동하고(어쩌면 5% 확률?) 나에게 문자 메시지를 보내고, 그렇지 않으면 오류가 발생한다는 것입니다 send-mail: Cannot open smtp.gmail.com:587
. 어떤 상황에서 성공할지는 잘 모르겠습니다.
답변1
cron 작업이 표준 출력 또는 표준 오류로 무엇인가를 인쇄하거나 명령이 실패 상태(즉, 0이 아닌 종료 코드)를 반환하는 경우 cron은 출력 및 상태 코드가 포함된 이메일을 사용자에게 보냅니다.
MAIL
crontab의 변수를 로컬 주소로 설정하여 이 설정을 무시하지 않는 한 로컬 이메일 기능을 통해 이메일이 사용자에게 전송됩니다 . 로컬 이메일이 ~/.forward
또는 유사한 경로를 통해 전달되는 경우 /etc/aliases
cron의 이메일은 분명히 다른 메일처럼 전달됩니다. 사용자의 이메일은 전달할 수 없지만 관리자의 이메일은 유효한 경우 관리자(기술적으로: )는 postmaster
반송 메일을 받게 됩니다.
문제를 확인하려면 이 이메일의 내용을 읽어보세요. 때때로 매 순간 작업이 실패하는 경우 다음 이메일을 받을 수 있습니다.
ISP가 때때로 귀하의 이메일을 거부하는 경우는 귀하가 많은 양의 이메일을 보냈고 잠재적인 스팸 발송자로 전송률이 제한되었기 때문일 수 있습니다.
답변2
text.py
이메일을 보내는 위치를 확인하기 위해 코드를 살펴보겠습니다 . 그런 다음 이를 출발점으로 사용하여 보내는 이유를 알아봅니다. Gmail로 직접 전송을 시도하지 않고 로컬 주소로 전송을 시도할 수 있습니다(아래 참조).
record.py
다음 주소로 편지를 보내실 수 있습니다 .표준 출력또는표준 에러어느 시점에서. cron
이것을 소유자(소유자 crontab
)에게 메일로 보낼 출력으로 선택하십시오.
나는 당신이 로컬 계정으로 전송된 이메일을 오프사이트 주소로 전달하도록 어느 시점에서 Pi를 구성했다고 의심합니다 [email protected]
. /etc/aliases
먼저 및 를 살펴 보겠습니다 ~/.forward
.