Mail ohne Attachment erzeugt Fehlermeldung im Log

  • Hallo,

    der Mailversand treibt mich in den Wahnsinn :(

    So wie es sich mir darstellt, verursacht eine einfache Mail ohne Attachment IMMER ein Fehlerlog.

    2020-01-24 06:42:01,171 [ERROR] [doorpi.action.SingleActions.mailto] send not attachment for this mail: coercing to Unicode: need string or buffer, bool found
    Traceback (most recent call last):
    File "/usr/local/lib/python2.7/dist-packages/doorpi/action/SingleActions/mailto.py", line 62, in fire_action_mail with open(smtp_snapshot, "rb") as snapshot_file: TypeError: coercing to Unicode: need string or buffer, bool found


    Config Auszug


    [DoorPi]
    base_path = /usr/local/etc/DoorPi
    eventlog = !BASEPATH!/conf/eventlog.db
    is_alive_led = ALIVE-LED
    smtp_snapshot =
    last_snapshot =
    snapshot_path = !BASEPATH!/empty/

    ....
    ....
    20 = mailto:jo@jo.priv,"--TEST-Haustuer-Klingel-TEST--", "%Y-%m-%d %H:%M:%S - Betätigung der Haustürklingel"


    Es spielt dabei keine Rolle, ob ich den vierten Mailparameter leer lasse oder ein False eintrage. Es gibt eine Fehlermeldung.

    Erst wenn ich im Snapshot Path eine Datei anlege und den vierten Mailparameter auf "True" setze, ist der Fehler weg.
    Jetzt habe ich mir allerdings eine unnötige leere Datei gesendet.


    Das nächste Problem ist die Codierung der Mail. Diese ist in US-ascii codiert, was Probleme mit Umlauten verursacht.

    Auszug aus dem Mail Header

    Content-Type: text/html; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 8bit


    Lässt sich das auf UTF-8 umstellen?

    Beste Grüsse

    JO

    • Offizieller Beitrag

    Hm also im Code sieht die https://github.com/motom001/Do…n/SingleActions/mailto.py tatsächlich merkwürdig aus. Zum einen kontrolliert motom001 sonst immer gegen nen Array mit False entsprechenden Werten und übernimmt nicht einfach den String (in der get-Funktion) (zumindest bei den Keyboards) Ansonsten ist die Einrückung wahrscheinlich falsch. Eigtl müsste der try Block weiter eingerückt sein, dass er unter dem if steht.



    Zum charset: ja geht. https://docs.python.org/2/library/email.charset.html wobei es nurnoch bei Python 2 ein Problem sein sollte. Um es einfach zu machen: bei den Aufrufen von MIMEText als dritten Parameter "utf-8" angeben (z.B. Zeile 52)

  • Derweil habe ich mir einen Workaround geschaffen.

    Statt den DoorPi Mailer weiche ich auf ein eigenes Script aus, welches auch ins DoorPi Log schreibt.
    Als Mailclient verwende ich hierbei s-nail. Der kann Umlaute und kann auch so konfiguriert werden, dass er die Mail an den Provider schickt.
    Das brauche ich allerdings nicht, da ich einen Mailserver auf dem Pi betreibe.


    Statt mailto wird nun das Script aufgerufen

    20 = os_execute:/usr/local/etc/DoorPi/mail_klingel.sh



    Script mail_klingel.sh

    #!/bin/sh
    _from=DoorPi@jo.priv
    _datum=`date "+%Y-%m-%d %H:%M:%S"`
    _nanoseconds=`date "+%N" | cut -c 1-3`
    echo "$_datum - Betätigung der Haustürklingel" | s-nail -r $_from -s "--TEST Haustürklingel TEST--" jo@jo.priv

    # Schreibe in PiLog
    echo "$_datum,$_nanoseconds [INFO] Betätigung der Haustürklingel" >> /usr/local/etc/DoorPi/log/doorpi.log
  • Wer mit s-nail Mails direkt über seinen Provider versenden möchte, der muss im Home-Verzeichnis eine Datei namens ".mailrc" anlegen.

    Hier ein Beispiel für GMX


    set smtp-use-starttls=yes

    set smtp=mail.gmx.net:587

    set smtp-auth=login

    set smtp-auth-user=YOUR-LOGIN-NAME

    set smtp-auth-password=YOUR-PASSWORD

    set from="YOUR-MAILADDRESS@gmx.de"

    set ssl-verify=ignore



    echto "test" | s-nail -s "Subject" test@domain

    • Offizieller Beitrag

    Na man kann natürlich alles mit eigenen Scripts lösen aber dann braucht es kein DoorPi.


    Das mailto Script scheint ja wirklich nicht korrekt zu sein und sollte korrigiert werden. Eine eMail sollte aber abgesendet werden, wenn deine Config stimmte (die exception die den Fehler anzeigt, wird ja gefangen und das Script weiter abgearbeitet).

    Was genau meinst du mit Mail an den Provider schicken? Auch beim mailto Script gibst du ja einen SMTP Server an, bei dem du dich anmeldest und dann halt die Zieladresse und Absenderadresse.

  • Das ist auf mein Script bezogen, da ich da einen lokalen Mailserver anspreche, der kein Login braucht. Ich habe die Info nur nachgereicht falls jemand mit s-nail externe Mailserver adressieren muss.
    Und natürlich mailt der mailto. Habe nie etwas anderes behauptet. Mich stören nur die beiden aufgezeigten Punkte.

    und..... ein Script löst noch lange keinen DoorPi ab! ;)