fetchmail in allen Ordner unter /mail

learnLinux

New Member
Hallo,

und zwar möchte ich das fetchmail für jede vorhandene fetchmail config in dem Ordner /mail ausgeführt wird.
Die Configs sind benutzerdefiniert (also jeder Benutzer hat eine eigene Config)
z.B. /mail/web1p1/.fetchmailrc

Anderes Problem:
das ganze muss unter den jeweiligen Benutzer immer ausgeführt werden.
 
Z.B per Cronjob unter den jeweiligen Benutzern

Danke aber ich möchte gerne das dies irgendwie automatisiert abläuft.
Also ich möchte das nicht jedes mal eintragen müssen, sondern es soll einfach für jede fetchmail Datei in den Ordner /mail/ erledigt werden.
 
Code:
man bash
Da steht, wie man Schleifen programmiert:

Code:
#! /bin/bash

cd /mail
for benutzer in *; do
    fetchmail -f /home/$benutzer/.fetchmailrc
done;
#
So oder so ähnlich könntest Du es machen (ungetestet). In den .fetchmailrc müssen natürlich die entsprechenden Optionen gesetzt sein, damit es richtig funktionieren kann.
 
danke LinuxAdmin

vom Prinzip her läuft das Script nur fetchmail möchte noch etwas:

fetchmail: WARNING: Running as root is discouraged.
fetchmail: no mailservers have been specified.
fetchmail: WARNING: Running as root is discouraged.
File /mail/web1p1/.fetchmailrc must be owned by you.
fetchmail: WARNING: Running as root is discouraged.
File /mail/web1p2/.fetchmailrc must be owned by you.
fetchmail: WARNING: Running as root is discouraged.
fetchmail: no mailservers have been specified.
fetchmail: WARNING: Running as root is discouraged.
fetchmail: no mailservers have been specified.
fetchmail: WARNING: Running as root is discouraged.
fetchmail: no mailservers have been specified.
fetchmail: WARNING: Running as root is discouraged.
fetchmail: no mailservers have been specified.
fetchmail: WARNING: Running as root is discouraged.
fetchmail: no mailservers have been specified.

Warum muss man einen mailserver angeben?
Wenn ich fetchmail direkt aufrufe kommt wenigstens das mailserver Problem nicht (wobei das Script anscheinend zuhäufig aufgerufen wird. Es sind nur 2 Fetchmail Dateien bisher vorhanden).
fetchmail -f /mail/web1p1/.fetchmailrc
fetchmail: WARNING: Running as root is discouraged.
File /mail/web1p1/.fetchmailrc must be owned by you.
Wobei der Owner web1p1 ist.
Wenn ich die fetchmailrc den root zuordne möchte dieser ein Passwort:
fetchmail -f /mail/web1p1/.fetchmailrc localhost
fetchmail: WARNING: Running as root is discouraged.
Enter password for root@localhost:
fetchmail: Authorization failure on root@localhost
fetchmail: Query status=3 (AUTHFAIL)
 
Du könntest vorher den Benutzer wechseln:
Code:
#! /bin/bash

cd /mail
for benutzer in *; do
    su $benutzer -c "fetchmail -f /mail/$benutzer/.fetchmailrc"
done;
#
Das sollte zwei Fehler beheben.

Für das Problem mit dem Mailserver müsstest Du wahrscheinlich nochmal genau die Manpage von fetchmail lesen, da das Programm wirklich viele Optionen hat, und genau die raussuchen, die für Deinen speziellen Fall zutreffend sind.

Der Passwort-Fehler rührt wahrscheinlich genau daher, dass Du keinen Mailserver/IMAP-Server angegeben hast, von dem die Mails abgeholt werden sollen.
 
danke.

habe jetzt mal
server:~# su web1p1 -c "fetchmail -f /mail/web1p1/.fetchmailrc"
server:~#

Manuell ausgeführt.
Nur leider scheint es als würde nichts ausgeführt werden von fetchmail
Ich erhalte keine Ausgabe und im Posteingang steht auch nichts.

In der Passwd steht:
web1p1:x:647:502::/mail/web1p1:/bin/false

Kann man trotzdem es unter dem Benutzer web1p1 ausführen?
Problem ist das web1p1 von Confixx angelegt wird.
 
Last edited by a moderator:
Es kommt halt darauf an, was in /mail/web1p1/.fetchmailrc steht. Du kannst die Datei ja mal hier posten (Passworte und Mail-Adressen kannst Du verfremden).
 
habe gerade meinen letzten Post noch verändert.

.fetchmailrc
defaults
proto pop3
poll irgendeinmailserver.de
proto pop3
user "meinbenutzername"
pass "meinpasswort"
is web1p1
keep

Egal was ich bei su web1p1 -c "irgendwas" eingebe, kommt trotzdem keine Fehlermeldung.
 
Last edited by a moderator:
Erweitere Deinen Fetchmailaufruf mit -v für Verbose und leite die Ausgaben in eine Datei mit:

Code:
fetchmail --keep -v -f /mail/$benutzer/.fetchmailrc > /tmp/fetchmail.log

Die --keep Option sorgt dafür, daß die Mails auf dem Server nicht gelöscht werden. Dies ist zum Test dringend empfohlen!
Sind Deine Angaben in der .fechtmailrc richtig gesetzt? Für ein abzufragendes externes Konto, daß einen jeweiligen lokalen Konto zugeordnet ist, sollte es in etwa je nach Fetchmailversion(Deine verwendete kennen wir auch noch nicht) so aussehen:

Code:
poll Provider/Server
        proto pop3
        via mx.server.de
        user "User/Email"
        pass "password"
        is Zieluser/Mailkonto
        fetchall 
        preconnect "mailfilter -M /home/username/.mailfilterrc"

Mittels Preconnect kann zB. noch Mailfilter vor dem Abholen der Mails aktiv werden.

Manual Page - fetchmail(man) ;)
 
Last edited by a moderator:
Version:
server3:~# fetchmail -V
fetchmail: WARNING: Running as root is discouraged.
This is fetchmail release 6.3.6+NTLM+SDPS+SSL+NLS.

Fallback MDA: (none)
Linux server 2.6.18-xen #4 SMP Wed May 23 16:08:19 CEST 2007 i686 GNU/Linux
Taking options from command line and /root/.fetchmailrc
No mailservers set up -- perhaps /root/.fetchmailrc is missing?

Warum sollte ich für den Root einen fetchmailrc Datei anlegen?

Das Problem ist das ich wenn ich mit su web1p1 -c "irgendwas > test.log" arbeite niemals etwas zurückgebe, als würde der Befehl gar nicht ausgeführt werden.

su web1p1 -c "echo ssss > /tmp/ssss.log"
ssss.log wird nicht erstellt
 
Last edited by a moderator:
Warum sollte ich für den Root einen fetchmailrc Datei anlegen?

Sollst Du ja gar nicht. Du sollst aber auch nicht "Fetchmail" unter "root" ausführen sondern unter den entsprechenden Usern.
 
Das Problem ist das ich wenn ich mit su web1p1 -c "irgendwas > test.log" arbeite niemals etwas zurückgebe, als würde der Befehl gar nicht ausgeführt werden.
Aber ein "normales" su web1p1 in einer ssh-Session/auf der Konsole funktioniert doch, oder?

Wenn ja, kannst Du ja mal "fetchmail -d0 -v" als web1p1 aufrufen.

Bei genauerem Überlegen könnte das auch der Grund sein, warum es nicht funktioniert, da fetchmail sich normalerweise beim ersten Aufruf in den daemon-Modus begibt und somit von den vorherigen Versuchen noch läuft. Weitere Aufrufe führen lediglich dazu, dass der wartende Prozess aufgeweckt wird. Am Besten mal alle Instanzen beenden (fetchmail -q) und mit "ps -ef" kontrollieren, dass kein fetchmail mehr läuft.
In die .fetchmailrc musst Du daher noch die Option "set daemon 0" einbauen, da Du die Mails je explizit über Dein Script abholen möchtest.

Als nächstes solltest Du rausfinden, warum su -c nicht funktioniert. Entstehen beim Aufruf Einträge in den Logdateien?
 
Aber ein "normales" su web1p1 in einer ssh-Session/auf der Konsole funktioniert doch, oder?
su web1p1 passiert ebenfalls nichts.
su irgendeinbenutzerden_ich_angelegt_habe funktioniert.
Aber die POP3 Benutzer von Confixx funktionieren alle nicht mit su.

Passwd:
web1p1:x:647:502::/mail/web1p1:/bin/false
Aber trotzdem sollte ein su funktionieren, denn ich kann ja auch sagen das die Datei fetchmail den Benutzer web1p1 gehört
 
Last edited by a moderator:
Nun ja, wenn der Benutzer /bin/false als shell hat, kann su auch nicht funktionieren (die shell solltest Du aber wahrscheinlich nicht ändern). Es gibt sicherlich noch eine andere Lösung, die ich mir aber erst genauer überlegen muss. Leider habe ich jetzt keine Zeit mehr -- vielleicht klappt es im Laufe des Abends oder morgen noch ;)
 
(die shell solltest Du aber wahrscheinlich nicht ändern).
Denn der Benutzer soll sich ja nicht einloggen können und es außerdem eh wieder von Confixx überschrieben werden würde.

Spricht etwas dagegen?
su web1p1 -c "fetchmail -f /mail/web1p1/.fetchmailrc" -s /bin/bash
somit funktioniert das aufrufen unter einen Benutzer.

vielleicht klappt es im Laufe des Abends oder morgen noch ;)
Danke im vorraus
 
Last edited by a moderator:
Gut, das mit der expliziten Angabe der Shell scheint ja wirklich zu funktionieren -- das wusste ich nicht :cool:

Ansonsten gibt es eigentlich keinen Grund, warum das Script unter einem bestimmten Benutzer ausgeführt werden muss, solange die Benutzer nicht die Möglichkeit haben, die .fetchmailrc zu verändern (Sicherheit!). Daher könntet Du auch einen Benutzer für fetchmail einrichten (mit gesperrtem Passwort) und das Script unter diesem Benutzer (ohne su) laufen lassen. Die .fetchmail-Dateien müssten dann diesem Benutzer gehören.

Wenn Du das Script nur zum Starten der verschiedenen fetchmail-Instanzen verwenden willst, brauchst Du natürlich die "daemon 0"-Option nicht (die war dafür gedacht, wenn Du das Script regelmäßig per cron-job aufrufst), sondern eher "daemon 600" (Abfrage alle 10 Minuten). Dafür sollte aber für jeden Benutzer mit der Option "pidfile" eine eigene Datei für die Prozess-ID gegeben werden.
 
Back
Top