crontab에서 출력 이메일을 보내려면 어떻게해야합니까?


45

crontab에서 작업 결과를 이메일로 보내려면 어떻게해야합니까? 나는 MAILTO=redacted@yahoo.com.au직업 위에 있지만, 작동하지 않습니다.

Postfix 또는 Sendmail과 같은 것을 사용해야하지만 내 인생에서는 이것을 달성하는 방법을 찾을 수 없습니다. Postfix 설정에 대한 간단한 가이드를 검색하고 검색했지만 모두 매우 복잡하여 이메일을 보내고 받고 모든 용어를 알 수 있도록 전체 서버를 설정해야합니다 (도메인 이름은 무엇입니까) 발신 이메일?).

내가하고 싶은 것은 crontab이 저에게 이메일을 보내는 것입니다. 왜 이렇게 어려운가요 ??

추가 정보:

내 crontab 파일은 다음과 같습니다.

MAILTO=redacted@yahoo.com.au
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

추가 정보 :

의 출력 ps -ef | grep '[s]endmail'

root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections

나는 cron이 작동한다는 것을 알고 있지만 echo Test | mail -s Test redacted@yahoo.com.au어쨌든 mail 명령을 테스트하고 있습니다.


@shellter 태그를 잊어 버렸습니다.
Clonkex

아주 좋은 테스트! 이 정보를 원래 질문에 포함시켜야합니다. 이 시점에서 나는 도울 수 있었던 과거입니다. 당신은 옳은 길을 가고 있지만, "왜 그렇게 어려운가?" 모든 사람은 자신의 특별한 경우를 가지고 있으며, 구성을 변경해야합니다.
shellter

귀하의 답변을 받았지만 이것에 대해 몇 시간을 할 것입니다. 다시 검색하십시오 sendmail setup. 행운을 빕니다!
shellter

@ shellter 방금 로그가 있다는 것을 깨달았습니다 mail. 그중 하나에 다음과 같이 표시됩니다. Diagnostic-Code: SMTP; 553 5.7.1 [BL21] Connections will not be accepted from [MyIPRedacted], because the ip is in Spamhaus's list; see http://postmaster.yahoo.com/550-bl23.html이것은 명령이 작동하지만 Yahoo가 메일을 차단하고 있음을 의미합니까?
Clonkex

내 급여 수준을 넘어서지 만, 그것은 명백한 메시지이므로 그렇게 보일 것입니다. 알다시피, 다른 IP에서 전송을 시도하고 IP를 통해 또는 오류 메시지가 변경되는지 확인하십시오. 당신은 알고 http://webmasters.stackexchange.com있습니까? 그들은 아마도 당신이 더 나은 또는 더 나은 것을 도울 수 있지만 chat.stackexchange.com/rooms/524/webmasters모든 질문이 환영받는 것처럼 보일 것입니다.
shellter

답변:


33

결국 나는 사용했다 sSMTP. Postfix또는 어느 것보다 훨씬 간단 sendmail하고 아름답습니다.

나중에 참조 할 수 있도록 Yahoo Mail에서 sSMTP를 사용하는 방법은 다음과 같습니다 (걱정하지 마십시오. 외관보다 훨씬 덜 복잡합니다).

  • Synaptic을 사용하여 ssmtp를 다운로드하십시오. 또는을 실행할 수 있습니다 sudo apt-get install ssmtp.

  • /etc/ssmtp/ssmtp.conf에서 구성 파일을 엽니 다.

  • 구성을 다음과 같이 만드십시오.

root=[yourRealEmail@yahoo.com.au]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[yourRealEmail@yahoo.com.au]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • OpenSSL을 사용하여 cert.pem 파일을 작성하십시오. 나는 명령을 사용했다 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(자세한 정보는 here ). 어디서나 파일을 붙일 수는 있지만 ~ /에 넣었습니다. 어디에 놓든지 TLS_CA_File=ssmtp.conf 의 라인이 올바른 위치 를 가리 키도록하십시오 .

  • 파일을 열고 /etc/ssmtp/revaliases행을 추가하십시오 [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587. 루트로 실행중인 경우 이름을 'root'로 바꾸는 다른 줄을 추가해야한다고 생각합니다.

  • 그게 다야, 당신은 갈 수있어! 테스트하는 가장 쉬운 방법 (IMO)은 다음과 같은 파일을 만드는 것입니다.

To: [yourRealEmail@yahoo.com.au]
From: "whateverYaWant" <[yourRealEmail@yahoo.com.au]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • 파일을 저장하고 닫은 다음 실제 sendmail이 설치되어 있지 않은지 확인하려면 sendmail -V'sSMTP'라고 표시해야합니다.
  • 마지막으로를 실행 cat fileWithEmailInIt.txt | sendmail -i -t한 다음 몇 초 (10-30) 정도 기다렸다가 이메일을 확인하십시오!

[yourRealEmail@yahoo.com.au]전자 메일 (대괄호없이)과 [yourRealYahooPassword]Yahoo Mail 암호 ( 대괄호없이 )로 대체 하십시오 .

추가 참고 사항 : Gmail에 문제가있는 경우이 정보의 옵션 1을 시도해보십시오 (Ben Creasy 덕분에).


그곳에. 해야 할 것입니다. 나는 바보 같은 서식을 그대로 사용하는 데 너무 많은 시간을 보냈습니다.
Clonkex

.pem 파일의 요점은 무엇입니까? 이 튜토리얼에는 다음 내용이 포함되어 있지 않습니다. havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard

1
Gmail을 위해, 나는 우연히 serverfault.com/questions/635139/... 및 보안 수준이 낮은 앱에 대한 액세스를 가능하게했다
벤 크리시을

2
sSMTP 제안에 감사드립니다. 우분투 위키에는 유용한 가이드가 있지만 hostname현재 표시된 이메일 주소는 사용하지 마십시오 . 이 답변 은 기본 서버 인증서를 사용할 수 있지만 TLS_CA_File=GMail을 통해 보낼 회선이 필요 없다는 것을 알았습니다 .
Mark Berry

2
@MattM. 더 이상 사용되지 않으며 유지 관리되지 않습니다. 비 프로덕션 환경에서 sSMTP를 사용하는 것이 좋습니다. :)
Clonkex

15

Postfix를 설치하십시오. 대부분의 다른 패키지보다 복잡하지만 여전히 복잡 하지는 않습니다 .

sudo apt-get install postfix

"인터넷 사이트"를 선택한 다음 모든 기본값을 그대로 사용하십시오. 그런 다음 외부 연결을 중단하고이를 " null client "로 바꾸면됩니다 . 실행 : 설정을 sudoedit /etc/postfix/main.cf찾아 inet_interfaces(끝 근처) 다음과 같이 변경하십시오 loopback-only.

inet_interfaces = loopback-only

마지막으로 Postfix를 다시 시작하십시오 sudo /etc/init.d/postfix restart(다시로드하지 않음).

이제 외부 컴퓨터의 전자 메일을 릴레이하지 않는 Postfix 설치가 완료되었으며 127.0.0.1 (및 IPv6의 경우 :: 1) 연결 만 허용합니다.


별도의 메모에서 Bron 대체가있는 비 상대 경로와 경로를 사용하고 있기 때문에 cron 줄이 작동 sh하지 않을 ~수 있습니다 PATH. 따라서 그것들을 대체하십시오 (실제 경로를 추측하고 있습니다).

1 0 * * *   /home/clonkex/Desktop/toskymesh.sh
59 6 * * *  /home/clonkex/Desktop/tooptus.sh
0 3 * * *   /usr/bin/snapraid sync

스크립트를 특정 디렉토리에서 실행해야하는 경우 cd올바른 디렉토리로 스크립트를 지정하십시오 . 그렇지 않은 cron것처럼 올바른 위치에 있다고 가정하지 마십시오 .


고맙지 만 Postfix 간단한 가이드가없는 것처럼 보일 경우에만 복잡 합니다 . 어쨌든, 나는 sSMTP를 사용하여 올바르게 작동하고 실제로는 간단합니다 (실제로 작동하려면 많은 어려움과 무작위 추측이 필요했지만). 답변을 게시하려고했지만 잊어 버렸습니다. 실제로 OS 설치를 완전히 중단하자마자 완전히 다시 응답
하자마자

그리고 실제로 내 cron 작업은 제대로 작동했습니다 ~/Desktop/.
Clonkex

2
나는 필요했다 inet_interfaces = localhost. 루프백 전용으로 제공postfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq

3

exim4와 함께 행운을 빕니다.

sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks

(고산은 내가 사용하는 메일 클라이언트 일뿐입니다)

그 후, 나는 달렸다

sudo dpkg-reconfigure exim4-config

그리고 프롬프트를 따라 갔다. 이 페이지 : https://help.ubuntu.com/community/Exim4 도 매우 도움이되었습니다. 실행하는 데 약 10 분이 걸렸습니다.


1

sSMTP 맨 페이지에서 : "사용자 에이전트 나 mailhub 에서 수행해야하는 앨리어싱을 수행하지 않습니다. 수신 호스트에서 수행해야하는 .forwards도 존중하지 않습니다. 특히 파이프 라인으로 전달하지 않습니다. "

따라서 외부 이메일에서 루트로 전송 된 모든 메시지를 받으려면 별칭을 지원하지 않기 때문에 sSMTP를 사용하는 것은 좋지 않습니다.

대신, 사용자 postfix를 사용할 수 있습니다. 여전히 매우 간단합니다. 메시지를 보내는 데 SMTP로 Gmail과 함께 사용하는 방법은 다음과 같습니다.

sudo apt-get install postfix mailutils

일반적인 메일 구성 유형 : 위성 시스템

시스템 메일 이름 : 메일 서버의 정규화 된 기본 이름 (예 : mail.example.com)

SMTP 릴레이 호스트 (비어 있음) : [smtp.gmail.com] : 587

/etc/postfix/main.cf에 추가하십시오 :

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

/ etc / postfix / sasl / sasl_passwd를 만듭니다.

[smtp.gmail.com]:587 emailtouseforsending@gmail.com:password

그때:

sudo postmap /etc/postfix/sasl/sasl_passwd
sudo chown -R root:postfix /etc/postfix/sasl
sudo chmod 750 /etc/postfix/sasl
sudo chmod 640 /etc/postfix/sasl/sasl_passwd*

/ etc / aliases를 편집하고 추가하십시오 :

root: email@example.com

마지막으로 다음을 실행하십시오.

sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service

이제 리디렉션이 작동하는지 테스트 할 수 있습니다.

echo "Test to root." | mail -s "Test message to root" root

도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.