게스트 OS에게 고정된 메일 서버를 사용하여 이메일을 보내도록 지시합니다.

게스트 OS에게 고정된 메일 서버를 사용하여 이메일을 보내도록 지시합니다.

Docker 컨테이너에서 postfix를 실행하고 있습니다. cronjob이 이메일을 보내려고 시도했지만 응답합니다.

“(CRON) info (No MTA installed, discarding output)” error in the syslog

이에 따르면협회, 해결책은 CRON이 이메일을 보낼 수 있도록 postfix를 설치하는 것입니다.

이 호스트에서 postfix를 실행하고 있는데, 그것을 사용할 수 있는 방법이 있나요? 다른 호스트가 있는데 postfix가 실행되고 있지 않습니다. 원격 도커 메일 서버도 사용하도록 지시할 수 있나요?

답변1

문제는 postfix가 실행되고 있지 않다는 것이 아니라 호스트의 매핑된 포트 25 또는 587에서 수신 대기해야 한다는 것입니다. 이런 경우에도 호스트에 postfix가 설치되어 있지 않다면 메일(표준 입력이나 명령줄 인수에서 얻은)을 해당 포트로 보내는 설치 프로그램이 설치되어 있지 않을 수 있습니다.

클라이언트 프로그램을 설치하면sSMTP또는메일 전송 프로토콜하지만 저는 제가 사용하고 있는 crontab 항목 주위의 작은 래퍼로 이 문제를 해결했습니다. 래퍼는 프로그램("실제" crontab etnry라고 함)이 0이 아닌 종료 값으로 종료되거나 출력에 "error:" 문자열이 포함된 경우에만 메시지를 보냅니다. 이렇게 하면 프로그램이 제대로 실행되는 경우 내 시스템에서 이메일을 받지 못하는 기간이 줄어듭니다. 이 프로그램은 Python 표준 라이브러리 smtp모듈을 사용하여 캡처된 출력을 보냅니다.

래퍼는 실행기를 사용 subprocess.check_output(cmd, stderr=subprocess.STDOUT)하고 다음을 사용하여 오류 결과를 보냅니다.

 smtp = smtplib.SMTP(host="", port=0)  # by default 'localhost' and 25
 smtp.connect()
 smtp.sendmail(
     from_email, to_email_list,
     email_header_and_body
 )

또한 호스트와 포트를 설정하여 다른 Docker 컨테이너에서 작업을 실행하는 데에도 사용합니다.

관련 정보