Bagaimana cara membuat crontab mengirimi saya email dengan output?


45

Bagaimana saya bisa membuat crontab mengirimi saya email dengan hasil pekerjaannya? Saya memiliki MAILTO=redacted@yahoo.com.aupekerjaan di atas, tetapi tidak berhasil.

Saya tahu saya perlu menggunakan sesuatu seperti Postfix atau Sendmail tetapi untuk kehidupan saya, saya tidak dapat menemukan cara untuk mencapai ini. Saya telah mencari dan mencari panduan sederhana tentang pengaturan Postfix tetapi mereka semua sangat rumit dan mengharapkan Anda membuat seluruh server untuk mengirim dan menerima email dan mengetahui semua persyaratan (seperti, apa itu nama domain) untuk email keluar?).

Yang ingin saya lakukan adalah memiliki email crontab saya. Mengapa ini sangat sulit ??

Informasi tambahan:

File crontab saya terlihat seperti ini:

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

Info Tambahan Lainnya:

Output dari ps -ef | grep '[s]endmail'

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

Saya tahu pasti cron berfungsi, tetapi saya sedang menguji perintah email dengan cara echo Test | mail -s Test redacted@yahoo.com.auapapun.


@shellter lupa memberi tag Anda.
Clonkex

Pengujian sangat bagus! Anda harus memasukkan info ini dalam pertanyaan awal Anda. Pada titik ini, saya sudah bisa membantu. Anda berada di jalur yang benar, tetapi, "Mengapa begitu sulit" .... Maaf ... itu adalah bahwa Linux / Unix adalah sistem yang sangat dapat dikonfigurasi. Setiap orang memiliki kasus khusus masing-masing, yang konfigurasi harus diubah.
shellter

Mendapat tanggapan Anda, tetapi saya akan menghabiskan berjam-jam untuk ini (mungkin). Sekali lagi, cari di sini sendmail setup. Semoga berhasil!
shellter

@shellter Saya baru sadar ada log untuk mail. Di salah satu dari mereka, tertulis ini: 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.htmlApakah ini berarti perintahnya berfungsi tetapi Yahoo memblokir surat?
Clonkex

di luar tingkat gaji saya, tapi itu pesan yang cukup eksplisit, jadi sepertinya begitu. Seperti yang mungkin Anda ketahui, coba kirim dari IP yang berbeda dan lihat apakah itu masuk ATAU jika pesan kesalahan berubah. Apakah Anda tahu tentang http://webmasters.stackexchange.com? Mereka mungkin dapat membantu Anda lebih baik atau lebih baik lagi di chat.stackexchange.com/rooms/524/webmastersmana semua pertanyaan tampaknya disambut (hm .. Anda mungkin perlu lebih banyak perwakilan untuk masuk, apakah Anda berada di situs pertukaran stackex lainnya?) Semoga beruntung.
shellter

Jawaban:


33

Akhirnya saya pakai sSMTP. Jauh, jauh lebih sederhana daripada salah satu Postfixatau sendmaildan melakukan pekerjaan dengan indah.

Untuk referensi di masa mendatang, inilah cara menggunakan sSMTP dengan Yahoo Mail (jangan khawatir, ini jauh lebih kompleks daripada tampilannya):

  • Gunakan Synaptic untuk mengunduh ssmtp. Atau Anda bisa lari sudo apt-get install ssmtp.

  • Buka file config di /etc/ssmtp/ssmtp.conf.

  • Buat konfigurasi seperti ini:

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
  • Buat file cert.pem dengan OpenSSL. Saya menggunakan perintah openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(info lebih lanjut di sini ). Anda dapat menempelkan file di mana saja, tapi saya baru saja membuangnya di ~ /. Di mana pun Anda meletakkannya, pastikan Anda mengarahkan TLS_CA_File=baris di ssmtp.conf ke lokasi yang benar.

  • Buka file /etc/ssmtp/revaliasesdan tambahkan baris [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587. Jika Anda menjalankan sebagai root, saya pikir Anda perlu menambahkan baris lain menggantikan nama Anda dengan 'root'.

  • Itu dia, kamu baik-baik saja! Untuk menguji, cara termudah (IMO) adalah membuat file dengan yang berikut di dalamnya:

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!
  • Simpan dan tutup file, lalu untuk memeriksa Anda tidak memiliki sendmail yang sebenarnya terinstal, jalankan sendmail -V- itu seharusnya mengatakan 'sSMTP'.
  • Terakhir, jalankan cat fileWithEmailInIt.txt | sendmail -i -t, lalu tunggu beberapa detik (10-30) dan periksa email Anda!

Jelas, ganti [yourRealEmail@yahoo.com.au]dengan email Anda (tanpa tanda kurung) dan [yourRealYahooPassword]dengan kata sandi Yahoo Mail Anda (sekali lagi, tanpa tanda kurung).

Catatan tambahan: Jika Anda memiliki masalah dengan Gmail, coba opsi 1 dari jawaban ini (terima kasih kepada Ben Creasy untuk info itu).


Sana. Itu harus dilakukan. Saya telah menghabiskan terlalu banyak waktu mengutak-atik format konyol seperti itu.
Clonkex

Apa gunanya file .pem? Saya melihat tutorial ini tidak termasuk satu: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard

1
Untuk Gmail, saya berlari ke serverfault.com/questions/635139/… dan harus mengaktifkan akses untuk aplikasi yang kurang aman
Ben Creasy

2
Terima kasih atas saran sSMTP. Wiki Ubuntu memiliki panduan bermanfaat (tapi jangan gunakan alamat email untuk hostnameseperti yang ditunjukkan saat ini). Jawaban ini menunjukkan bahwa Anda dapat menggunakan sertifikat server default, tetapi saya menemukan bahwa saya tidak memerlukan TLS_CA_File=saluran untuk mengirim melalui GMail.
Mark Berry

2
@MattM Tidak ditinggalkan, tidak dipertahankan. Seharusnya benar-benar baik untuk menggunakan sSMTP di lingkungan non-produksi :)
Clonkex

15

Instal Postfix. Ini lebih rumit daripada kebanyakan paket lain tetapi masih tidak rumit .

sudo apt-get install postfix

Pilih "Situs Internet" dan kemudian terima semua defaultnya. Maka kita hanya perlu menghentikan koneksi luar, mengubahnya menjadi " null client ". Jalankan: sudoedit /etc/postfix/main.cfdan temukan inet_interfacespengaturan (dekat bagian akhir) dan ubah menjadi loopback-only, seperti:

inet_interfaces = loopback-only

Dan akhirnya restart Postfix with sudo /etc/init.d/postfix restart(reload tidak akan dilakukan).

Anda sekarang memiliki instalasi Postfix yang tidak akan menyampaikan email untuk mesin luar, ia hanya akan menerima koneksi pada 127.0.0.1 (dan :: 1 untuk IPv6).


Pada catatan terpisah, garis cron Anda mungkin tidak berfungsi karena Anda menggunakan jalur dan jalur non-relatif dengan substitusi Bash di. shTidak mengerti ~dan mungkin tidak memiliki PATHset yang tepat . Jadi gantilah dengan (saya hanya menebak jalur sebenarnya):

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

Dan jika skrip Anda perlu dijalankan dari direktori tertentu, pastikan skrip tersebut cdmasuk ke direktori yang benar. Jangan berasumsi bahwa itu cronakan berada di tempat yang tepat karena kemungkinan tidak akan terjadi.


Terima kasih, tapi Postfix adalah rumit, jika hanya karena ada tampaknya tidak ada panduan sederhana apapun. Bagaimanapun, saya membuatnya bekerja dengan baik dengan sSMTP yang melakukan persis apa yang saya butuhkan dan benar-benar sederhana (walaupun masih membutuhkan banyak tebakan acak dan acak untuk membuatnya benar-benar berfungsi). Saya bermaksud memposting jawaban tetapi lupa - Saya benar-benar berhasil menghancurkan instalasi OS saya sehingga segera setelah saya menyelesaikannya lagi sepenuhnya saya akan memposting jawaban saya sendiri :)
Clonkex

Dan sebenarnya pekerjaan cron saya bekerja dengan baik ~/Desktop/.
Clonkex

2
Saya membutuhkan inet_interfaces = localhost. loopback-only memberi sayapostfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq

3

Saya sangat beruntung dengan exim4.

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

(alpine hanyalah klien email yang saya suka gunakan)

Setelah itu, saya lari

sudo dpkg-reconfigure exim4-config

dan ikuti petunjuknya. Halaman ini: https://help.ubuntu.com/community/Exim4 juga sangat membantu. Butuh waktu sekitar 10 menit untuk menjalankannya.


1

Dari manual sSMTP: "Itu tidak melakukan aliasing, yang harus dilakukan baik di agen pengguna atau di mailhub. Juga tidak menghormati. Selanjutnya, yang harus dilakukan pada host penerima. Terutama tidak mengirim ke jaringan pipa. "

Jadi, jika Anda ingin menerima semua pesan yang dikirim untuk melakukan rooting pada email ekstenal Anda, adalah ide yang buruk untuk menggunakan sSMTP, karena itu tidak mendukung alias.

Sebagai gantinya, Anda dapat menggunakan postfix pengguna. Itu masih sangat sederhana. Berikut cara menggunakannya dengan gmail sebagai smtp Anda untuk mengirim pesan:

sudo apt-get install postfix mailutils

Jenis umum konfigurasi email: Sistem satelit

Nama surat sistem: Nama server surat yang benar-benar memenuhi syarat, misalnya, mail.example.com

Host relai SMTP (kosong untuk tidak ada): [smtp.gmail.com]: 587

Tambahkan ke /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

Buat / etc / postfix / sasl / sasl_passwd

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

Kemudian:

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*

Edit / etc / aliases dan tambahkan:

root: email@example.com

Terakhir, jalankan:

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

Sekarang, Anda dapat menguji apakah pengalihan berfungsi:

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

Semoga ini bisa membantu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.