cronjob mit smtp schaegt fehl

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich bin neu im Forengeschäft, daher korrigiert mich ruhig wenn ich was falsch oder missverständlich beschreibe.
    Ich versuche mir über cron täglich eine E-mail mit verschiedenen werten schicken zu lassen, probeweise erst mal meine IP.
    In meinem Script habe ich meinen E-mail account komplett statisch festgelegt (user,pwd,smtpserver,port)
    lasse mir über wget eine "watismeineIP" seite holen,
    suche nach einem bestimmten String mit grep meine IP ausgeben
    und diese per sendemail an meine E-mail adresse schicken.
    Das Script läuft auch wie gewünscht wenn ich es direkt auf der shell aufrufe.

    nun will ich es ein mal am Tag starten über cron.
    hab mir also mit meinem Standartnutzer mit crontab -e eine crontabelle angelegt, und unten in die letzte
    Zeile ein
    15 16 * * * /pfad/zum/Script > /pfad/zum/Logfile
    angelegt.
    Schau ich nun ins Log steht dort aber leider

    Apr 13 20:04:18 raspberrypi sendEmail[2271]: NOTICE => Authentication not supported by the remote SMTP server!
    Apr 13 20:04:18 raspberrypi sendEmail[2271]: ERROR => Received: 530 5.7.0 Must issue a STARTTLS command first. e42sm35426914eev.32 - gsmtp

    mein erster gedanke war "cron startet den job als anderer user", lass ich mir den aber im script mit whoami ausgeben erscheint mein Standartuser.
    Rechte sind eher großzügig vergeben, rwx für user und gruppe.
    was mache ich falsch??? :helpnew:

  • Die Fehlermeldung sagt bereits was zu tun ist -> Must issue a STARTTLS command first

    Bedeutet:
    Dein EMail Anbieter verlangt das du zur Authentication TLS verwendest ... Also einfach beim absetzen des sendEmail Befehls einschalten und gut is. Siehe dazu zum Beispiel > hier <

  • Ahh endlich mal ein Forum in dem man auch zeitnah Antworten erhält :bravo2:,
    sowas ist mir ein eintrag in meinen Favoriten wert.
    Bis hier hin schon mal danke.
    Nun aber mal zu den antworten:
    Hier wie gewünscht mein script

    &quot;emailScript&quot;


    #!/bin/bash
    echo `whoami`

    SENDER="dummy@gmail.com"


    RECIPIENT="dummy@gmail.com"


    SMTPSERVER="smtp.gmail.com:587"


    SMTPUSERNAME="dummy@gmail.com"


    SMTPPASSWORD="sagicheuchdochnich"

    USETLS=1

    SUBJECT="IP HEUTE"

    wget -q -O IP http://www.myip.is
    BODY=`grep "The IP used to connect to this webserver" IP`
    rm IP
    sleep 15


    OPTIONS=""

    if [ -n "${SMTPSERVER}" ]; then
    OPTIONS="${OPTIONS} -s ${SMTPSERVER}"
    fi

    if [ -n "${SMTPUSERNAME}" ]; then
    OPTIONS="${OPTIONS} -xu ${SMTPUSERNAME}"
    fi

    if [ -n "${SMTPPASSWORD}" ]; then
    OPTIONS="${OPTIONS} -xp ${SMTPPASSWORD}"
    fi

    if [ -n "${USETLS}" ]; then
    if [ ${USETLS} == 1 ]; then
    OPTIONS="${OPTIONS} -o tls=yes"
    else
    OPTIONS="${OPTIONS} -o tls=no"
    fi
    fi

    sendEmail -f ${SENDER} -t ${RECIPIENT} -u "${SUBJECT}" -m "${BODY}" ${OPTIONS}

    exit 0


    Damit komme ich dann gleich auch zur beantwortung der zweiten Antwort (vorsicht wiederholungsfehler), denn ich dachte ich hätte die TSL-Nutzung bereits eingebaut, und wie gesagt direkt aufgerufen funktioniert das Script ja auch, nur über cron kommt der Fehler.
    Also was sehe ich noch nicht?

  • Zeig mal bitte deinen exakten crontab Eintrag und auch über welchen Benutzer du das eingetragen hast


    PS: Wie in dem von mir erwähnten Script zu lesen ist: Fuer den Mailversandt ueber GoogleMail muss der Account fuer den POP3- und SMTP-Zugriff zunaechst aktiviert werden!
    Hast du das gemacht?

  • Diese Fehlermeldung kann eigentlich nicht von deinem Script sein. Cron startet dein Script um 16:15 Uhr, aber die Fehlermeldung ist von 20:04 Uhr.

    Es ist relativ schnuppe welche Rechte du vergibst, wichtig ist der User mit dem das Script ausgeführt wird. Geh als root rein, mache einen neuen Cronjob Eintrag und versuche es nochmal. Vergess bitte nicht, das du sendmail nutzt. Sinniger wäre es ein Programm wie "mutt" nach zu installieren und diesen dann zu nutzen. Vortei ist: du kannst deine Sendeparameter sehr viel besser und gezielter einstellen.


  • Diese Fehlermeldung kann eigentlich nicht von deinem Script sein. Cron startet dein Script um 16:15 Uhr, aber die Fehlermeldung ist von 20:04 Uhr.

    :wallbash: Verdammt das hätte einem ja auch auffallen können. Respekt.

    Nebenbei, auch wenn es nicht zur Lösung deines Problems beiträgt: Warum nutzt du nicht irgend einen DynDNS dienst? Freedns z.B.

    Nachtrag: Du solltest entweder $PATH laden/setzen oder aber für jeden Befehl den vollen Pfad angeben:

    Code
    PATH=/usr/bin;/sbin/;/usr/local/bin;/wo/auch/immer;/usw

    Außerdem hast du "sendEmail" meinst du nicht "sendmail" ? Was also soll "sendEmail" sein? ein alias? funktioniert nicht im cron!

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

    Einmal editiert, zuletzt von Lunepi (15. April 2014 um 15:38)

  • Jau, den hab ich übersehen! :daumendreh2::D

    Was soll sendEmail sein? Ich bin echt von sendmail ausgegangen....

    Verschickst du deine EMail direkt oder via SMTPAUTH über einen Mailprovider? Denn dann würde ich wirklich vorschlagen: postfix mit SMTPAUTH Übertragung konfigurieren und dann via Mutt in die weite weite Welt verschicken.


  • Was soll sendEmail sein?

    Zitat


    SendEmail ist ein leichtgewichtiger, komplett befehlszeilenbasierter SMTP- Mailagent. Er wurde zur Verwendung in Bash-Skripten, Perl-Programmen und Websites entwickelt, ist jedoch auch in vielen anderen Fällen nützlich.
    SendEmail wurde in Perl geschrieben und ist einzigartig, weil keine weiteren Module benötigt werden. Das Programm hat eine überschaubare Schnittstelle, welche die Verwendung sehr einfach macht.

    Siehe z. B.: http://www.gtkdb.de/index_36_2296.html
    https://packages.debian.org/de/wheezy/arm/mail/sendemail

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Hi, also sind ja ne menge Lösungsansätze, also der reihe nach.
    -hier mal mein crontabeintrag, angelegt mit dem User in dessen home ich mich befinde
    15 07 * * * /home/gehteuchnixan/Training/mailnotify.sh > /home/gehteuchnixan/logs/cronlog.log

    -die Differenz zwischen meinem Posting des crontabs und dem von mir gepostetem Fehlerlog is schnell erklärt.
    Um eine Lösung zu finden hab ich natürlich immer kleinere Änderungen gemacht und den cronjob umgestellt, in
    diesem Fall also auf 20:00Uhr.
    Daher ist das log schon von meinem e-mail-script.

    - Mutt schau ich mir gerne mal an(zum rumprobieren hab ich mir ja die kleine Kiste ja geholt)

    - nein ich habe nicht sendmail genutzt sondern sendemail (isn Perl script was ich in anderen Foren gefunden habe)

    - nen dyndns nutz ich noch nicht, werd ich erst machen wenn ich genau weiß wie ich die kleine Kiste letztendlich
    einsetzen werde(gibt ja mannigfaltige Ansätze).Dies Script sollte mir ja nur mal das Erlebnis bieten aus einem Script
    eine Mail zu mir senden zu können(sprich erfahrungsgewinn), und ich werd die Mail hinterher als unterwegsüberwachung
    nutzen(loginüberwachung, etc)

    Nu aber mal das wichtigste HABS ZUM LAUFEN BEKOMMEN (sorry für den shout), der Hinweis mit TSL brachte mich auf die Lösung, ich hab nun einfach die Abfrage drumherum auskommentiert und lasse TSL hart verdratet auf "yes" setzen. Also kommt der Fehler wohl aus der Abfrage, warum sie Funktioniert wenn ich das Script direkt auslöse, aber nicht über cron blick ich zwar immer noch nicht, aber mein script läuft jetzt.

    :danke_ATDE: an euch alle
    (vllt. weiß ja jemand von euch warum) ;)


  • Also kommt der Fehler wohl aus der Abfrage, warum sie Funktioniert wenn ich das Script direkt auslöse, ...

    Ja. Das Script ist fehlerhaft (... unexpected operator ergibt tls=no) und funktioniert bei mir auch nicht, wenn ich das Script direkt auslöse:

    Code
    ...
    + [ -n 1 ]
    + [ 1 == 1 ]
    ./mailscript: 44: [: 1: unexpected operator
    + OPTIONS= -s mail.gmx.net:587 -xu <#####>@gmx.de -xp <#*#*#*> -o tls=no
    ...
    ...
    Apr 15 23:40:57 localhost sendEmail[4751]: ERROR => Received: 	550-Requested action not taken: mailbox unavailable, 550 Insufficient security or privacy level.
    + exit 0

    Die Zeile 44 im Script ist:

    Code
    if [ ${USETLS} == 1 ]; then

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Außerdem hast du "sendEmail" meinst du nicht "sendmail" ? Was also soll "sendEmail" sein? ein alias? funktioniert nicht im cron!

    Wenn man das Paket sendEmail installiert hat heißt auch der Befehl bzw die Binary sendEmail ...
    Es existiert ein Symlink von /usr/bin/sendemail auf /usr/bin/sendEmail

    /usr/sbin/sendmail wiederum ist ein anderes Programm bzw ein Symlink auf -> /usr/sbin/exim4

    Da in seinem Script aber der Befehl sendEmail , und auch im Crontab Logfile ebenfalls sendEmail steht - würde ich zunächst davon ausgehen das er tatsächlich sendEmail aber nicht sendmail nutzen möchte ... Desweiteren sind die Befehls-Optionen die er verwendet ebenfalls für sendEmail aber nicht für exim4



    -hier mal mein crontabeintrag, angelegt mit dem User in dessen home ich mich befinde

    Ist es zu schwer ein mal zu schreiben um welchen Benutzer es sich handelt?


    - nein ich habe nicht sendmail genutzt sondern sendemail (isn Perl script was ich in anderen Foren gefunden habe)

    erm? Dann würde ich mal stark annehmen das der Fehler in diesem fremden Script aus irgendeinem Forum liegt ... Installier mal das reguläre und offizielle sendEmail Programm über das gleichnamige Paket


    Nu aber mal das wichtigste HABS ZUM LAUFEN BEKOMMEN (sorry für den shout), der Hinweis mit TSL brachte mich auf die Lösung, ich hab nun einfach die Abfrage drumherum auskommentiert und lasse TSL hart verdratet auf "yes" setzen. Also kommt der Fehler wohl aus der Abfrage, warum sie Funktioniert wenn ich das Script direkt auslöse, aber nicht über cron blick ich zwar immer noch nicht, aber mein script läuft jetzt.

    *hust* es heißt TLS :)

    Aber wie gesagt - diese Info dass du ein Fremdes Script aus irgendeinem Forum nutzt kommt leider äußerst spät - is ja nich grad so als würden wir alle Scripts aus irgendwelchen Foren kennen :(

  • Ok danke nochmal für alle schnellen Antworten, den namen meines accounts möcht ich aus (zugegeben leicht Paranoiden) Sicherheitsbedenken nicht Posten.
    Für den verschreiber (tls/tsl) schäm ich mich mal ne halbe stunde.
    Aber noch mals danke für die erleuchtungen.

    Einmal editiert, zuletzt von Maddes76 (25. April 2014 um 21:35)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!