Làm thế nào để làm cho crontab gửi email cho tôi với đầu ra?


45

Làm thế nào tôi có thể làm cho crontab gửi email cho tôi với đầu ra của công việc? Tôi có MAILTO=redacted@yahoo.com.aucông việc trên, nhưng nó không hoạt động.

Tôi biết tôi cần sử dụng một cái gì đó như Postfix hoặc Sendmail nhưng đối với cuộc sống của tôi, tôi không thể tìm ra cách để đạt được điều này. Tôi đã tìm kiếm và tìm kiếm một hướng dẫn đơn giản về thiết lập Postfix nhưng chúng hoàn toàn phức tạp và mong bạn sẽ thiết lập toàn bộ máy chủ để gửi và nhận email và để biết tất cả các điều khoản (như, tên miền là gì cho email gửi đi?).

Tất cả những gì tôi muốn làm là có crontab gửi email cho tôi. Tại sao điều này là rất khó khăn??

Thông tin bổ sung:

Tập tin crontab của tôi trông như thế này:

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

Thông tin bổ sung:

Đầu ra của ps -ef | grep '[s]endmail'

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

Tôi biết chắc chắn cron đang hoạt động, nhưng dù sao tôi cũng đang kiểm tra lệnh mail echo Test | mail -s Test redacted@yahoo.com.au.


@shellter quên gắn thẻ bạn.
Clonkex

Thử nghiệm rất tốt! Bạn nên bao gồm thông tin này trong câu hỏi ban đầu của bạn. Tại thời điểm này, tôi đã có thể giúp đỡ. Bạn đang đi đúng hướng, nhưng, "Tại sao nó quá khó" .... Xin lỗi ... đó có thể là Linux / Unix là một hệ thống có cấu hình cao. Mọi người đều có trường hợp đặc biệt của riêng mình, mà cấu hình phải được thay đổi.
shellter

Có phản hồi của bạn, nhưng tôi sẽ dành hàng giờ cho việc này (có lẽ). Một lần nữa, tìm kiếm ở đây cho sendmail setup. Chúc may mắn!
shellter

@shellter Mình mới nhận ra có nhật ký cho mail. Trong một trong số đó, nó nói điều này: 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Điều này có nghĩa là lệnh đang hoạt động nhưng Yahoo đang chặn thư?
Clonkex

vượt quá mức lương của tôi, nhưng đó là một thông điệp khá rõ ràng, vì vậy nó có vẻ như vậy. Như bạn có thể biết, hãy thử gửi từ một IP khác và xem nếu nó đi qua HOẶC nếu thông báo lỗi thay đổi. Bạn có biết về http://webmasters.stackexchange.com? Họ có thể có thể giúp bạn tốt hơn hoặc tốt hơn nhưng chat.stackexchange.com/rooms/524/webmastersdường như tất cả các câu hỏi đều được chào đón (hm .. bạn có thể cần nhiều đại diện hơn để tham gia, bạn có ở bất kỳ trang web stackexchange nào khác không?) Chúc may mắn.
shellter

Câu trả lời:


33

Cuối cùng tôi đã sử dụng sSMTP. Nó xa, đơn giản hơn nhiều so với hoặc Postfixhoặc sendmaillàm công việc tuyệt vời.

Để tham khảo trong tương lai, đây là cách sử dụng sSMTP với Yahoo Mail (đừng lo lắng, nó ít phức tạp hơn vẻ ngoài của nó):

  • Sử dụng Synaptic để tải ssmtp. Hoặc bạn có thể chạy sudo apt-get install ssmtp.

  • Mở tệp cấu hình tại /etc/ssmtp/ssmtp.conf.

  • Làm cho cấu hình trông như thế này:

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
  • Tạo tệp cert.pem bằng OpenSSL. Tôi đã sử dụng lệnh openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(thông tin thêm ở đây ). Bạn có thể dán tập tin ở bất cứ đâu, nhưng tôi chỉ cười thầm trong ~ /. Bất cứ nơi nào bạn đặt nó, hãy chắc chắn rằng bạn trỏ TLS_CA_File=dòng trong ssmtp.conf đến đúng vị trí.

  • Mở tệp /etc/ssmtp/revaliasesvà thêm dòng [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587. Nếu bạn đang chạy với quyền root, tôi nghĩ bạn cần thêm một dòng khác thay thế tên của bạn bằng 'root'.

  • Đó là nó, bạn tốt để đi! Để kiểm tra, cách dễ nhất (IMO) là tạo một tệp có nội dung sau:

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!
  • Lưu và đóng tệp, sau đó để kiểm tra xem bạn đã cài đặt sendmail thực sự chưa , hãy chạy sendmail -V- nó sẽ nói 'sSMTP'.
  • Cuối cùng, chạy cat fileWithEmailInIt.txt | sendmail -i -t, sau đó đợi vài giây (10-30) và kiểm tra email của bạn!

Rõ ràng, thay thế [yourRealEmail@yahoo.com.au]bằng email của bạn (không có dấu ngoặc) và [yourRealYahooPassword]bằng mật khẩu Yahoo Mail của bạn (một lần nữa, không có dấu ngoặc).

Lưu ý bổ sung: Nếu bạn gặp rắc rối với Gmail, hãy thử tùy chọn 1 của câu trả lời này (cảm ơn Ben Creasy về thông tin đó).


Đó Điều đó sẽ phải làm. Tôi đã dành quá nhiều thời gian để loay hoay với định dạng ngớ ngẩn như nó vốn có.
Clonkex

Điểm của tệp .pem là gì? Tôi thấy hướng dẫn này không bao gồm một: havetheknhow.com/Configure-the-server/Install-ssmtp.html
Richard

1
Đối với Gmail, tôi đã chạy vào serverfault.com/questions/635139/ và phải kích hoạt quyền truy cập cho các ứng dụng kém an toàn hơn
Ben Creasy

2
Cảm ơn đề xuất sSMTP. Ubuntu Wiki có một hướng dẫn hữu ích (nhưng không sử dụng địa chỉ email hostnamenhư hiện được hiển thị). Câu trả lời này cho thấy rằng bạn có thể sử dụng chứng chỉ máy chủ mặc định, nhưng tôi thấy tôi không cần một TLS_CA_File=dòng để gửi qua GMail.
Mark Berry

2
@MattM. Không được tán thành, chỉ không được duy trì. Sẽ hoàn toàn ổn khi sử dụng sSMTP trong môi trường phi sản xuất :)
Clonkex

15

Cài đặt Postfix. Nó phức tạp hơn hầu hết các gói khác nhưng nó vẫn không phức tạp .

sudo apt-get install postfix

Chọn "Trang web Internet" và sau đó chấp nhận tất cả các giá trị mặc định. Sau đó, chúng ta chỉ cần dừng các kết nối bên ngoài, biến điều này thành một " máy khách null ". Chạy: sudoedit /etc/postfix/main.cfvà tìm inet_interfacescài đặt (gần cuối) và thay đổi nó thành loopback-only, như vậy:

inet_interfaces = loopback-only

Và cuối cùng khởi động lại Postfix bằng sudo /etc/init.d/postfix restart(tải lại sẽ không làm).

Bây giờ bạn có cài đặt Postfix sẽ không chuyển tiếp email cho các máy bên ngoài, nó sẽ chỉ chấp nhận các kết nối trên 127.0.0.1 (và :: 1 cho IPv6).


Một lưu ý khác, các dòng cron của bạn có thể không hoạt động vì bạn đang sử dụng các đường dẫn và đường dẫn không liên quan với các thay thế Bash. shKhông hiểu ~và nó có thể không có một PATHbộ thích hợp . Vì vậy, thay thế chúng bằng (Tôi chỉ đoán ở đường dẫn thực tế):

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

Và nếu tập lệnh của bạn yêu cầu được chạy từ một thư mục cụ thể, hãy đảm bảo chúng cdvào đúng thư mục. Đừng cho rằng nó cronsẽ ở đúng nơi vì nó sẽ không xảy ra.


Cảm ơn, nhưng Postfix rất phức tạp, nếu chỉ vì dường như không có hướng dẫn đơn giản nào. Dù sao, tôi đã làm cho nó hoạt động tốt với sSMTP, nó thực hiện chính xác những gì tôi cần và thực sự đơn giản (mặc dù nó vẫn mất rất nhiều thời gian và đoán ngẫu nhiên để làm cho nó thực sự hoạt động). Tôi định đăng một câu trả lời nhưng quên mất - Tôi thực sự đã cố gắng phá hủy cài đặt hệ điều hành của mình để ngay khi tôi nhận được nó một lần nữa, tôi sẽ đăng câu trả lời của riêng mình :)
Clonkex

Và thực sự công việc cron của tôi làm việc tốt với ~/Desktop/.
Clonkex

2
Tôi cần thiết inet_interfaces = localhost. loopback-only chỉ cho tôipostfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq

3

Tôi đã rất may mắn với exim4.

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

(alpine chỉ là ứng dụng thư tôi thích sử dụng)

Sau đó, tôi chạy

sudo dpkg-reconfigure exim4-config

và làm theo thông qua các gợi ý. Trang này: https://help.ubfox.com/community/Eimum4 cũng rất hữu ích. Tôi mất khoảng 10 phút để chạy.


1

Từ trang sSMTP: "Nó không thực hiện khử răng cưa, mà phải được thực hiện trong tác nhân người dùng hoặc trên mailhub. Nó cũng không tôn trọng. Do đó, phải được thực hiện trên máy chủ nhận. Nó đặc biệt không cung cấp cho đường ống. "

Vì vậy, nếu bạn muốn nhận tất cả các tin nhắn được gửi đến root trên email mở rộng của mình, bạn nên sử dụng sSMTP, vì nó không hỗ trợ bí danh.

Thay vào đó, bạn có thể sử dụng postfix. Nó vẫn rất đơn giản. Đây là cách sử dụng nó với gmail làm smtp của bạn để gửi tin nhắn:

sudo apt-get install postfix mailutils

Loại cấu hình chung của thư: Hệ thống vệ tinh

Tên thư hệ thống: Tên đủ điều kiện ưa thích của máy chủ thư, ví dụ: mail.example.com

Máy chủ chuyển tiếp SMTP (không có gì): [smtp.gmail.com]: 587

Thêm vào /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

Tạo / etc / postfix / sasl / sasl_passwd

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

Sau đó:

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*

Chỉnh sửa / etc / bí danh và thêm:

root: email@example.com

Cuối cùng, chạy:

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

Bây giờ, bạn có thể kiểm tra nếu chuyển hướng đang hoạt động:

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

Hy vọng nó giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.