Wie erstelle ich eine E-Mail mit crontab?

45

Wie kann ich mir von crontab eine E-Mail mit der Ausgabe seiner Jobs schicken lassen? Ich habe [email protected]über den Jobs, aber es funktioniert nicht.

Ich weiß, dass ich etwas wie Postfix oder Sendmail verwenden muss, aber für mein Leben kann ich nicht herausfinden, wie ich das erreichen kann. Ich habe nach einer einfachen Anleitung zum Einrichten von Postfix gesucht und gesucht, aber alle sind wahnsinnig kompliziert und erwarten, dass Sie einen ganzen Server einrichten, um E-Mails zu senden und zu empfangen und alle Begriffe zu kennen (z. B. was ist ein Domainname?) für ausgehende E-Mails?).

Ich möchte nur eine E-Mail von crontab erhalten. Warum ist das so schwierig?

Zusätzliche Information:

Meine crontab-Datei sieht so aus:

[email protected]
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

Weitere Zusatzinformationen:

Die Ausgabe von ps -ef | grep '[s]endmail'

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

Ich weiß sicher, dass cron funktioniert, aber ich teste den Mail-Befehl echo Test | mail -s Test [email protected]trotzdem mit.

Clonkex
quelle
@shellter hat vergessen, dich zu markieren.
Clonkex
Sehr gute Prüfung! Sie sollten diese Informationen in Ihre ursprüngliche Frage aufnehmen. Zu diesem Zeitpunkt bin ich nicht mehr in der Lage zu helfen. Sie sind auf dem richtigen Weg, aber "Warum ist es so schwierig?" Jeder hat seinen eigenen Sonderfall, für den die Konfiguration geändert werden muss.
Shellter
Ich habe Ihre Antwort erhalten, aber ich würde (wahrscheinlich) Stunden damit verbringen. Suchen Sie hier erneut nach sendmail setup. Viel Glück!
Shellter
@shellter Mir ist gerade aufgefallen, dass es Protokolle für gibt mail. In einem von ihnen heißt es: 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.htmlBedeutet dies, dass der Befehl funktioniert, aber Yahoo die Mail blockiert?
Clonkex
Über meine Gehaltsklasse hinaus, aber das ist eine ziemlich explizite Botschaft, also scheint es so. Wie Sie wahrscheinlich wissen, versuchen Sie, von einer anderen IP-Adresse aus zu senden, und überprüfen Sie, ob die Fehlermeldung sich ändert. Wissen Sie von http://webmasters.stackexchange.com? Sie können Ihnen wahrscheinlich besser oder sogar besser helfen, chat.stackexchange.com/rooms/524/webmasterswenn anscheinend alle Fragen willkommen sind (hm ... Sie brauchen möglicherweise mehr Repräsentanten, um einzusteigen, sind Sie auf einer anderen Stack-Exchange-Site?). Viel Glück.
Shellter

Antworten:

33

Am Ende habe ich verwendet sSMTP. Es ist viel einfacher als entweder Postfixoder sendmailund erledigt die Arbeit wunderbar.

Weitere Informationen zur Verwendung von sSMTP mit Yahoo Mail finden Sie hier (keine Sorge, es ist weitaus weniger komplex als es aussieht):

  • Verwenden Sie Synaptic, um ssmtp herunterzuladen. Alternativ könntest du auch rennen sudo apt-get install ssmtp.

  • Öffnen Sie die Konfigurationsdatei unter /etc/ssmtp/ssmtp.conf.

  • Lass die Konfiguration so aussehen:

root=[[email protected]]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[[email protected]]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • Erstellen Sie die Datei cert.pem mit OpenSSL. Ich habe den Befehl verwendet openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(mehr Infos hier ). Sie können die Datei an eine beliebige Stelle kleben, aber ich habe sie einfach in ~ / eingelegt. Stellen Sie sicher, dass Sie die TLS_CA_File=Linie in der Datei ssmtp.conf auf die richtige Position verweisen .

  • Öffnen Sie die Datei /etc/ssmtp/revaliasesund fügen Sie die Zeile hinzu [yourPCUsername]:[[email protected]]:smtp.mail.yahoo.com:587. Wenn Sie als root ausgeführt werden, müssen Sie vermutlich eine weitere Zeile hinzufügen, in der Ihr Name durch 'root' ersetzt wird.

  • Das war's, du kannst loslegen! Zum Testen besteht der einfachste Weg (IMO) darin, eine Datei mit den folgenden Inhalten zu erstellen:

To: [[email protected]]
From: "whateverYaWant" <[[email protected]]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • Speichern und schließen Sie die Datei, und führen Sie 'sSMTP' aus , um zu überprüfen, ob das echte sendmail installiert ist sendmail -V.
  • Führen Sie zum Schluss aus cat fileWithEmailInIt.txt | sendmail -i -t, warten Sie einige Sekunden (10-30) und überprüfen Sie Ihre E-Mails!

Ersetzen [[email protected]]Sie dies natürlich durch Ihre E-Mail-Adresse (ohne Klammern) und [yourRealYahooPassword]durch Ihr Yahoo Mail-Passwort (ebenfalls ohne Klammern).

Zusätzlicher Hinweis: Wenn Sie Probleme mit Google Mail haben, versuchen Sie Option 1 dieser Antwort (danke an Ben Creasy für diese Informationen).

Clonkex
quelle
Dort. Das muss reichen. Ich habe viel zu viel Zeit damit verbracht, mich mit der albernen Formatierung zu beschäftigen.
Clonkex
Wozu dient die PEM-Datei? Ich sehe, dass dieses Tutorial keines enthält: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Richard
1
Bei Google Mail bin ich auf serverfault.com/questions/635139/… gestoßen und musste den Zugriff für weniger sichere Apps aktivieren
Ben Creasy,
2
Vielen Dank für den sSMTP-Vorschlag. Das Ubuntu-Wiki enthält eine hilfreiche Anleitung (aber verwenden Sie keine E-Mail-Adresse für, hostnamewie derzeit angezeigt). Diese Antwort deutet darauf hin, dass Sie Standardserverzertifikate verwenden können, aber ich habe festgestellt, dass ich keine TLS_CA_File=Leitung zum Senden über GMail benötige .
Mark Berry
2
@MattM. Nicht veraltet, nur nicht gewartet. Es sollte völlig in Ordnung sein, sSMTP in einer Nicht-Produktionsumgebung zu verwenden :)
Clonkex
15

Installieren Sie Postfix. Es ist komplizierter als die meisten anderen Pakete, aber es ist immer noch nicht kompliziert .

sudo apt-get install postfix

Wählen Sie "Internet Site" und akzeptieren Sie dann alle Standardeinstellungen. Dann müssen wir nur die externen Verbindungen beenden und daraus einen " Null-Client " machen. Führen Sie Folgendes aus: sudoedit /etc/postfix/main.cfund suchen Sie die inet_interfacesEinstellung (in der Nähe des Endes) und ändern Sie sie in loopback-only:

inet_interfaces = loopback-only

Und schließlich starte Postfix mit neu sudo /etc/init.d/postfix restart(Nachladen geht nicht).

Sie haben jetzt eine Postfix-Installation, die keine E-Mails für externe Computer weiterleitet, sondern nur Verbindungen mit 127.0.0.1 (und :: 1 für IPv6) akzeptiert.


Auf einem separaten Hinweis, Ihre cron Linien arbeiten wahrscheinlich nicht , weil Sie mit Bash Ersetzungen in nicht-relative Pfade und Pfade verwenden. shNicht verstehen , ~und es könnte nicht einen richtigen hat PATHSatz. Also ersetze sie durch (ich rate nur die tatsächlichen Pfade):

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

Und wenn Ihre Skripte von einem bestimmten Verzeichnis ausgeführt werden müssen, stellen Sie sicher, dass sie cdsich im richtigen Verzeichnis befinden. Gehen Sie nicht davon aus, dass crondies am richtigen Ort sein wird, da dies wahrscheinlich nicht der Fall sein wird.

Oli
quelle
Danke, aber Postfix ist kompliziert, wenn auch nur, weil es keine einfachen Anleitungen zu geben scheint. Wie auch immer, ich habe es mit sSMTP, das genau das tut, was ich brauche und das wirklich einfach ist, gut funktionieren lassen (obwohl es immer noch viel Fummeln und Zufallsraten gekostet hat, bis es tatsächlich funktioniert hat). Ich wollte eine Antwort posten, habe aber vergessen - ich habe es tatsächlich geschafft , meine Betriebssysteminstallation zu zerstören, so dass ich meine eigene Antwort
posten
Und tatsächlich haben meine Cronjobs prima geklappt ~/Desktop/.
Clonkex
2
Ich brauchte inet_interfaces = localhost. Loopback-only gab mirpostfix: fatal: config variable inet_interfaces: host not found: loopback-only
Craq
3

Ich hatte sehr viel Glück mit exim4.

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

(alpine ist nur der Mail-Client, den ich gerne benutze)

Danach rannte ich los

sudo dpkg-reconfigure exim4-config

und folgte durch die Eingabeaufforderungen. Diese Seite: https://help.ubuntu.com/community/Exim4 war ebenfalls sehr hilfreich. Ich brauchte ungefähr 10 Minuten, um es zum Laufen zu bringen.

Oh Ar
quelle
1

Aus der sSMTP-Manpage: "Es wird kein Aliasing ausgeführt, das entweder im Benutzeragenten oder im Mailhub ausgeführt werden muss. Es werden auch keine Weiterleitungen berücksichtigt, die auf dem empfangenden Host ausgeführt werden müssen. Es wird insbesondere nicht an Pipelines übermittelt. "

Wenn Sie also alle an root gesendeten Nachrichten in Ihrer externen E-Mail erhalten möchten, ist es eine schlechte Idee, sSMTP zu verwenden, da es keine Aliase unterstützt.

Stattdessen könnten Sie Benutzer Postfix. Es ist immer noch sehr einfach. So verwenden Sie es mit Google Mail als SMTP zum Senden von Nachrichten:

sudo apt-get install postfix mailutils

Allgemeine Art der Mailkonfiguration: Satellitensystem

Systemmailname : Der bevorzugte vollqualifizierte Name des Mailservers, z. B. mail.example.com

SMTP-Relay-Host (leer für keine): [smtp.gmail.com]: 587

Fügen Sie zu /etc/postfix/main.cf hinzu:

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

Erstellen Sie / etc / postfix / sasl / sasl_passwd

[smtp.gmail.com]:587 [email protected]:password

Dann:

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*

Bearbeiten Sie / etc / aliases und fügen Sie Folgendes hinzu:

root: [email protected]

Führen Sie zum Schluss Folgendes aus:

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

Jetzt können Sie testen, ob die Umleitung funktioniert:

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

Ich hoffe es hilft.

Duli
quelle