staging.inyokaproject.org

SMTP-Mail

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

Strinox

Anmeldungsdatum:
14. Oktober 2022

Beiträge: Zähle...

Hallo. Ich arbeite gerade an einem Projekt mit dem Raspberry. Es soll eine PDF-Datei von einem USB-Stick automatisiert per Mail versendet werden, sobald der USB-Stick eingesteckt wird.

Als erstes habe ich eine udev-rule erstellt, die erkennt wenn ein usb angeschlossen wird.

1
ACTION=="add", KERNEL=="sd[a-z]1"- RUN+="/bin/usb_automail.sh"

Dann habe ich das Skript zur versendung der Mail geschrieben. (/bin/usb_automail.sh)

1
2
3
4
#!/bin/bash
/bin/example.sh | telnet smtp.mailserver.local 25 &> /dev/null
whoami >> /tmp/automail.log
echo "$(date) automail ausgeführt" >> /tmp/automail.log

Die Datei /bin/example.sh beinhaltet die Befehle die bei der telnet-verbindung eingegeben werden.

Das Skript /bin/usb_automail.sh funktioniert wenn ich es einzeln ausführe. (Mail kommt an)

Wenn ich den USB einstecke zieht auch die udev. (Sehe ich anhand eines Eintrages in /tmp/automail.log)

Die E-mail wird jedoch nicht verschickt. Woran könnte das liegen?

PS:Ich habe es als normalen Benutzer sowie als root ausprobiert.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Strinox schrieb:

Es soll eine PDF-Datei von einem USB-Stick automatisiert per Mail versendet werden, sobald der USB-Stick eingesteckt wird. ...

Die E-mail wird jedoch nicht verschickt. Woran könnte das liegen?

Teste mal ob eine andere Datei, die sich auf der SD-Karte des PI (und nicht auf dem gerade eingesteckten USB-Stick) befindet, versendet werden kann (wenn der USB-Stick eingesteckt wird).

Strinox

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2022

Beiträge: Zähle...

Dass die Datei angehängt wird hab ich noch garnicht integriert. Dies werde ich erst implementieren wenn die rule und das Skript funktionieren.

Aber es geht darum das die Mail nicht versendet wird. Wenn ich jedoch das Skript usb_automail.sh starte, dan funktioniert es.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Strinox schrieb:

Wenn ich jedoch das Skript usb_automail.sh starte, dan funktioniert es.

Dann fehlen evtl. beim versenden via udev-Regel, irgendwelche erforderliche "Ressourcen" bzw. env.-Variablen, die beim manuellen ausführen, vorhanden sind.

Strinox

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2022

Beiträge: 10

Löst die udev-regel das Skript nicht gleich aus wie wenn ich das Skript in der Kommandozeile aufrufe?

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Strinox schrieb:

Löst die udev-regel das Skript nicht gleich aus wie wenn ich das Skript in der Kommandozeile aufrufe?

Anscheinend nicht. Sieht man ja auch immer wieder bei cronjobs (als Beispiel aus diversen Forenthreads), dass eine crontab manche Pfade bzw. manche Variablen die für die Kommandozeile (schon) bekannt/konfiguriert sind, nicht kennt (... und dort dann richtigerweise explizit eingetragen werden müssen).

EDIT:

BTW: In der Datei "/lib/udev/rules.d/50-udev-default.rules" sind (einige) Umgebungsvariablen für udev gesetzt. Man müsste jetzt wissen, ob bzw. welche davon, Einfluss auf die Ausführung deines Scriptes (via udev) haben.

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5584

Warum verwendest du telnet statt mail?

Wie sieht /bin/example.sh aus?

Warum verwendest du fuer telnet nicht den absoluten Pfad? Damit verlaesst du dich darauf, dass PATH so gesetzt ist, wie von dir erwartet.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Man könnte oben im Skript diese Zeile einfügen, um zu sehen, wie die Umgebung und ein paar andere Dinge aussehen:

1
{ id; env; } >|/tmp/mailenv.$$

Dann schaust Du mal, was die unterschiedlichen Ausführungen dort hinterlassen.

sebix schrieb:

Warum verwendest du telnet statt mail?

DAS habe ich mich auch gefragt. Alternativ mailx, elm, mutt. Es gibt reichlich Kommandozeilenprogramme, mit denen man Email verlässlich verschicken kann.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Strinox schrieb:

[…] udev-rule […] E-mail wird jedoch nicht verschickt. Woran könnte das liegen?

Udev läuft in einer Sandkiste. Netzwerk-Zugriffe (u.a.) aus Udev-Regeln sind generell verboten und werden blockiert.

Strinox

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2022

Beiträge: 10

Ich konnte das Problem lösen.

Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.

Neuer Code:

1
2
3
4
5
6
#!/bin/bash
{
sleep 2
PFAD=$(find /media/usbreader02 -name "*.pdf")
echo -e "Textinhalt" | mail -s "Überschrift" -a .... -A "$PFAD"
}&

Mit diesen modifikationen funktionierts jetzt.sebix schrieb:

Warum verwendest du telnet statt mail?

Ich hatte zuerst mail verwendet, dann habe ichs mit telnet versucht um den Mailserver direkt anzusprechen. Werde es jetzt wieder mit mail machen, vereinfacht auch das anfügen eines Anhangs.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Strinox schrieb:

Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.

Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?

Wie ist die Ausgabe von:

systemctl cat systemd-udevd.service | grep -i address

?

Strinox

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2022

Beiträge: 10

lubux schrieb:

Strinox schrieb:

Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.

Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?

Wie ist die Ausgabe von:

systemctl cat systemd-udevd.service | grep -i address

?

RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 IPAdressDeny=any

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Strinox schrieb:

lubux schrieb:

Strinox schrieb:

Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.

Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?

Du hast aber die Frage:

Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?

, noch nicht beantwortet.

BTW:

Note that running programs that access the network or mount/unmount filesystems is not allowed inside of udev rules, due to the default sandbox that is enforced on systemd-udevd.service.

Starting daemons or other long-running processes is not allowed; the forked processes, detached or not, will be unconditionally killed after the event handling has finished. In order to activate long-running processes from udev rules, provide a service unit and pull it in from a udev device using the SYSTEMD_WANTS device property. See systemd.device(5) for details.

Quelle: manpage für udev.

Strinox

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2022

Beiträge: 10

Du hast aber die Frage:

Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?

, noch nicht beantwortet.

Beim der telnet version hat sich herausgestellt das es sich um ein Problem der Namensauflösung handelt. Wiso weiss ich auch nicht.

Bei der mail version wollte ich die ganze Zeit den Anhang mitversenden und somit war die var Pfad mitangegeben. Da aber mein Skript gestartet ist bevor der usb gemountet ist, Wurde in $Pfad nichts gespeichert und die Mail wurde nicht versendet.

Ich hoffe ich konnte das einigermassen verständlich beschreiben.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

Strinox schrieb:

Beim der telnet version hat sich herausgestellt das es sich um ein Problem der Namensauflösung handelt. Wiso weiss ich auch nicht.

Bei der mail version wollte ich die ganze Zeit den Anhang mitversenden ...

Der Anhang ist auf dem USB-Stick?

BTW: Funktioniert es jetzt auch mit telnet, wenn Du die IP-Adresse verwendest (... damit keine Namensauflösung erforderlich ist) und Du den Anhang _nicht_ mit versendest?

Antworten |