วิธีที่จะทำให้ 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 ทำงาน แต่ฉันทดสอบ mail คำสั่งที่มีecho Test | mail -s Test redacted@yahoo.com.auอยู่แล้ว


@shellter ลืมแท็กคุณ
Clonkex

การทดสอบที่ดีมาก! คุณควรรวมข้อมูลนี้ไว้ในคำถามเดิมของคุณ เมื่อมาถึงจุดนี้ฉันผ่านมาสามารถช่วย คุณอยู่ในเส้นทางที่ถูกต้อง แต่ "ทำไมจึงยากเหลือเกิน" .... ขออภัย ... นั่นเป็นเพราะ Linux / Unix เป็นระบบที่สามารถกำหนดค่าได้สูง ทุกคนมีกรณีพิเศษของตนเองซึ่งต้องเปลี่ยนการกำหนดค่า
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 อื่นและดูว่ามันไปถึงหรือว่าข้อผิดพลาดการเปลี่ยนแปลง คุณรู้หรือไม่เกี่ยวกับhttp://webmasters.stackexchange.com? พวกเขาอาจช่วยให้คุณดีขึ้นหรือดีขึ้น แต่chat.stackexchange.com/rooms/524/webmastersก็ยินดีต้อนรับเมื่อดูเหมือนว่าทุกคำถาม (hm .. คุณอาจต้องการตัวแทนมากขึ้นเพื่อเข้าร่วมคุณอยู่ในไซต์ stackexchange อื่น ๆ หรือไม่) โชคดี
shellter

คำตอบ:


33

sSMTPในท้ายที่สุดผมใช้ มันไกลง่ายกว่าอย่างใดอย่างหนึ่งPostfixหรือsendmailและทำงานได้อย่างสวยงาม

สำหรับการอ้างอิงในอนาคตนี่คือวิธีการใช้ sSMTP กับ Yahoo Mail (ไม่ต้องกังวลมันซับซ้อนน้อยกว่าที่ดู):

  • ใช้ 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
  • สร้างไฟล์ cert.pem ด้วย OpenSSL ฉันใช้คำสั่งopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(ข้อมูลเพิ่มเติมที่นี่ ) คุณสามารถติดไฟล์ได้ทุกที่ แต่ฉันเพิ่งโยนมันใน ~ / ตรวจสอบให้แน่ใจว่าคุณชี้TLS_CA_File=บรรทัดเป็น ssmtp.conf ไปยังตำแหน่งที่ถูกต้อง

  • เปิดไฟล์และเพิ่มบรรทัด/etc/ssmtp/revaliases [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587หากคุณใช้งานเป็น root ฉันคิดว่าคุณต้องเพิ่มอีกบรรทัดหนึ่งแทนที่ชื่อของคุณด้วย '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
ริชาร์ด

1
สำหรับ Gmail ฉันวิ่งเข้าไปที่serverfault.com/questions/635139/และต้องเปิดใช้งานการเข้าถึงแอปที่ปลอดภัยน้อยกว่า
Ben Creasy

2
ขอบคุณสำหรับคำแนะนำ sSMTP Ubuntu Wiki มีคำแนะนำที่เป็นประโยชน์ (แต่อย่าใช้ที่อยู่อีเมลสำหรับhostnameแสดงในขณะนี้) คำตอบนี้แสดงให้เห็นว่าคุณสามารถใช้ใบรับรองเซิร์ฟเวอร์เริ่มต้น แต่ฉันพบว่าฉันไม่จำเป็นต้องมีTLS_CA_File=บรรทัดสำหรับการส่งผ่าน GMail
Mark Berry

2
@MattM ไม่เลิกใช้ไม่ได้รับการบำรุงรักษา มันควรจะเป็นโดยสิ้นเชิงปรับใช้ sSMTP ในสภาพแวดล้อมที่ไม่ใช่การผลิต :)
Clonkex

15

ติดตั้ง Postfix มันมีความซับซ้อนมากขึ้นกว่าแพคเกจอื่น ๆ มากที่สุด แต่ก็ยังคงไม่ได้มีความซับซ้อน

sudo apt-get install postfix

เลือก "ไซต์อินเทอร์เน็ต" จากนั้นยอมรับค่าเริ่มต้นทั้งหมด จากนั้นเราเพียงแค่ต้องหยุดการเชื่อมต่อภายนอกทำให้สิ่งนี้กลายเป็น " ไคลเอ็นต์ที่ไม่ได้ใช้ " เรียกใช้: 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 (และ :: 1 สำหรับ IPv6)


ในบันทึกย่อที่แยกต่างหากบรรทัด cron ของคุณอาจไม่ทำงานเพราะคุณใช้เส้นทางที่ไม่เกี่ยวข้องและเส้นทางที่มีการแทนที่ Bash ใน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 ซึ่งทำสิ่งที่ฉันต้องการและเรียบง่ายอย่างแท้จริง (แม้ว่ามันจะยังคงเล่นซอและคาดเดาจำนวนมากเพื่อให้มันใช้งานได้จริง) ฉันตั้งใจจะโพสต์คำตอบ แต่ลืมไป - จริง ๆ แล้วฉันจัดการทำลายการติดตั้งระบบปฏิบัติการของฉันดังนั้นทันทีที่ฉันได้รับมันไปอีกครั้งอย่างเต็มที่ฉันจะโพสต์คำตอบของฉันเอง :)
Clonkex

และที่จริงงาน 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 manpage: "มันไม่ได้ทำ aliasing ซึ่งจะต้องทำใน user agent หรือบน mailhub หรือจะไม่ให้เกียรติ. ไปข้างหน้าซึ่งจะต้องทำใน host ที่รับโดยเฉพาะอย่างยิ่งไม่ได้ส่งไปยังท่อ "

ดังนั้นหากคุณต้องการรับข้อความทั้งหมดที่ส่งถึงรูทในอีเมลภายนอกของคุณคุณควรใช้ sSMTP เนื่องจากไม่รองรับนามแฝง

แต่คุณสามารถผู้ใช้ postfix แทน มันง่ายมาก นี่คือวิธีใช้กับ gmail เป็น smtp ของคุณสำหรับส่งข้อความ:

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.