Hilfe ich bin zu blöd! Mails über Pop sammeln und über smtp abrufen?

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Na denn versuch ich's mal mit Aufklärung: :)
Wie gesagt ist es Aufgabe des Clients Absender und Empfänger festzulegen. Das interessiert den Server erstmal ned. Wenn du also auf antworten klickst, dann wird der Client eine Mail vorbereiten, wo der originale Sender als Empfänger eingetragen wird (du willst ja dem Absender antworten). Als Absender verwendet der Client was bei ihm eingestellt ist (das ist also von den Clienteinstellungen abhängig, aber nehmen wir mal an admin@deineDomain.de)
Dann sendet der Client die Mail an den eingestellten SMTP Server (deine Mailstation/Postfix). Der Postfix guckt erstmal ob der Empfänger eventuell auch bei sich selber liegt (also ein Empfänger bei deineDomain.de). Im Fall deiner Antwort an deine gmx Adresse ist das nicht der Fall. Nun weiss Postfix, dass er die Mail ins Internet schicken muss. Also übergibt er sie seinem SMTP Client.
Der Postfix SMTP Client guckt dann erst in der Config ob eventuell ein Relay Server eingetragen ist (der letzte verlinkte Wikibeitrag zeigt wie das geht). Ist kein Relay Server eingetragen oder zuständig, dann wird Postfix diese Email direkt an den zuständigen Server des Empängers schicken. Das nennt sich dann direct-mx und ist mit dynamischen IPs heikel, aber es geht mit einigem Aufwand.
Wenn aber Postfix einen Relay Server in der Config findet, dann wird er die Mail an diesen definierten Server schicken. Dieser Server wird dann die Zustellung bei gmx vornehmen. Damit kommt die Mail für gmx von einer fixen IP und sollte nicht verweigert werden. Das nennt sich dann Relaying.

Lange Rede kurzer Sinn: Der Absender ist dem Postfix mehr oder weniger schnuppe. Du kannst auch (ist zwar nicht sehr nett) bill@gates.com als Absender verwenden. Postfix wird die Mail per default mit allen Absendern aktzeptieren. Erst der Empfangsserver (z.B. gmx) wird eine Absenderprüfung machen. Diese beschränkt sich meist darauf zu prüfen ob diese Domain, die der Absender verwendet, überhaupt existiert (also keine Phantasiedomain wie in der Adresse ich@du.sdfsdfsdfsdf).
In den letzten Jahren sind verschiedene weitere Methoden entwickelt worden, um Absender (Domains) zu verifizieren. So z.B. SPF (Sender Policy Framework).
 

sowosamma

Benutzer
Mitglied seit
16. Jun 2009
Beiträge
565
Punkte für Reaktionen
0
Punkte
42
Mein Unverständnis:
Woher soll die E-Mail wissen wo sie hin muß?
im SMTP von Outlook ist die IP der DS eingetragen.
Und auch im rc-File von getmail stehen keinerlei smtp Daten drin.

Das rc-File (also getmail) ist nur für das Abholen der Emails. Zum Versenden musst Du Deinem Client (also Outlook) sagen welchen Postausgang er nehmen soll. Wenn es über die DS laufen soll, dann muss dort auch die IP der DS stehen und diese übernimmt den Versand (entweder über Deine Domain oder über gmx mittels Relay).
Ich verwende den SMTP von gmx & co direkt im Client (bei mir Thunderbird). Hab das mit dem Relay bis dato nicht verstanden. Wobei der letzte Beitrag von jahlives so langsam Licht ins Dunkle bringt.
In TB kann ich auch mehrer Ausgangsserver verwenden. So habe ich ein Konto mit der DS als Posteingang und gmx (mail.gmx.net) als Postausgangsserver. Desweiteren habe ich mehrere Alias-Adressen, wenn ich z.B. von 1&1 oder web antworten will. Das geht meins Wissens auch in Outlook... irgendwie :confused:
 

Miru

Benutzer
Mitglied seit
27. Aug 2010
Beiträge
76
Punkte für Reaktionen
3
Punkte
8
Sooo,

ich sag mal danke Euch beiden.
Ich habs so gemacht wie sowosamma sagte, einfach die smtp´s der Mailprovider eingetragen :)

Danke nochmal für Euren Support :D
Michael
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Hallo zusammen,

nach Durcharbeiten dieses Beitrags habe ich das Abrufen meiner Mails hinbekommen. Erstmal vielen Dank an alle, die hier mitgeholfen haben.

Jetzt habe ich noch zwei Probleme:

1. Beim Abrufen werden alte Mails, die vom Server nicht gelöscht wurden (Option -l statt -d), nochmal abgerufen und sind dann doppelt (dreifach, ...) vorhanden. Kann man auch einstellen, dass nur neue Mails abgerufen werden?

2. Die Automatisation mit crom klappt leider nicht wie im Wiki beschrieben. Wenn ich als User (nicht root!) den cron-Test aufrufe, erhalte ich die Fehlermeldung:
/opt/sbin/cron: can't open or create /opt/var/run/cron.pid: Permission denied
log_it: (CRON 15077) DEATH (can't open or create /opt/var/run/cron.pid: Permission denied)
Woran liegt's?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
2. nur root kann cron starten/sauber nutzen. Das liegt v.a. daran, dass root der einzige User ist, der ohne Passwortabfrage Prozesse unter anderen Usern starten darf. du musst also den test auch als root aufrufen

1. eigentlich sollten die Mails beim Abholen sauber gelöscht werden. Es gibt eine Option nur ungelesene Mails mittels getmail runterzuladen. Schau mal ins Manual.
Aus eigener Erfahrung kann ich jedoch sagen, dass getmail die Mails bei mir sauber von den Server löscht nach dem Download
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Ich hätte zwei Probleme und eine Frage:

1. Das regelmäßige Abrufen von getmail via cron funktioniert leider nicht:

Wenn ich cron (wie im Wiki beschrieben) als root im Testmodus starte, erhalte ich folgende Fehlermeldung

xx> /opt/sbin/cron -x test
debug flags enabled: test
/opt/sbin/cron: can't lock /opt/var/run/cron.pid, otherpid may be 14903: Resource temporarily unavailable
log_it: (CRON 7834) DEATH (can't lock /opt/var/run/cron.pid, otherpid may be 14903: Resource temporarily unavailable)

Was soll mir dieser Fehler sagen?

2. Wenn ich getmail als User manuell starte, funktioniert es. Leider bekomme ich aber, wenn ich getmail danach ein zweites Mail aufrufe, alle Mails doppelt in den Postkorb. (Ich habe nicht die Option "auf dem Serrver löschen", sondern "auf dem Server lassen" (-l) aktiviert. Gibt es eine Option, dass nur neue Mails runtergeladen werden und keine Doppelten?

Wer kann helfen?

3. Wenn ich mich als root einlogge und dann mit su Username mich als User einlogge, kann ich getmail.sh aufrufen. Der Befehl cd ~ bringt mich auf /volume1/homes/Username.

Wenn ich mich aber bei über putty nicht mit root, sondern gleich als user einlogge, dann erhalte ich beim Aufrufen von getmail.sh folgende Fehlermeldung:
xx> sh getmail.sh
Error: Default config/data dir "/root/.getmail/" does not exist - create or specify alternate directory with --getmaildir option

Und der Befehl cd ~ bringt mich in das Verzeichnis /root.

Der Befehlt "whoami" bringt aber das Ergebnis Username.

Wie kommt's?
 
Zuletzt bearbeitet:

xabano

Benutzer
Mitglied seit
17. Aug 2008
Beiträge
411
Punkte für Reaktionen
0
Punkte
22
Ich hätte zwei Probleme und eine Frage:

1. Das regelmäßige Abrufen von getmail via cron funktioniert leider nicht:

Wenn ich cron (wie im Wiki beschrieben) als root im Testmodus starte, ...

Was soll mir dieser Fehler sagen?
Dass der cron bereits läuft. Zuerst cron stoppen, dann kannst du den Test ausführen:

killall cron
/opt/sbin/cron -x test

3. Wenn ich mich als root einlogge und dann mit su Username mich als User einlogge, kann ich getmail.sh aufrufen. Der Befehl cd ~ bringt mich auf /volume1/homes/Username.......

Wie kommt's?
In diesem Thread ist das abgehandelt worden.
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Danke für die Hilfe!

Also nach dem Killen und Test-Starten erhalte ich die erwarteten minütlichen Meldungen:

[8902] cron started
log_it: (Username 8904) CMD (/volume1/homes/Username/getmail.sh &>/dev/null)
log_it: (Username 8907) CMD (/volume1/homes/Username/getmail.sh &>/dev/null)

Seltsamerweise werden aber die Mails nicht abgerufen, obwohl ich - wie im Wiki beschrieben - den cron Daemon mit /opt/etc/init.d/S10cron neu gestartet habe. Woran könnte das liegen?

Das im Wiki beschriebene logfile /var/log/dovecot-info.log existiert bei mir auch nicht.
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
die Option test (-x) führt den Code nicht wirklich aus, sondern zeigt nur den Job an, der ausgeführt würde.
Du musst cron wieder "richtig" starten, damit die Jobs auch ausgeführt werden.
Noch eine Bermerkung zum getmail Script: Hast du in deinem Script sichergestellt, dass der Code nicht mehrfach aufgerufen wird? Wenn du nämlich den Job minütlich machst und es mal länger als 1 Minute dauert die Mails abzuholen, dann wird der Code ein zweites Mal ausgeführt. Und das knallt dann auf dem Server, dabei können auch Mails verloren gehen.
Du musst also unbedingt sicherstellen, dass dein Script nicht aufgerufen werden kann, solange noch eine ältere Instanz davon läuft. Da ist wirklich äusserst wichtig!

Gruss

tobi

p.s. werden denn die Mails sauber abgeholt, wenn du das Script manuell startest? Also ohne cron
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Danke für den Hinweis bzgl. minütlichem Abholen. Das wollte ich zwar so einrichten, werde aber nach Deinem Hinweis den Takt auf 2 oderr sogar 3 Minuten hochsetzen.

Wenn ich das Skript als User starte, werden die Mails sauber abgeholt. Wenn ich das Skript als root starte, erhalte ich die Fehlermeldung:

Error: Default config/data dir "/root/.getmail/" does not exist - create or specify alternate directory with --getmaildir option

Ich weiß jetzt nicht, als was cron das Skript startet. Falls als root, wie kann ich den Fehler umgehen?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das Script sollte nicht als root laufen. Es sollte unter dem User laufen, dem auch die Mailbox gehört
Das kannst du z.B. so machen: Im crontab den Scriptaufruf so schreiben:
Code:
[...] su DEIN_USER -c "/pfad/zum/getmail.sh"
[...] steht für den Rest deines cronjobs also nicht mit reinschreiben ;)

Auch wenn du da Intervall höher setzt, sollte ein Scipt IMMER prüfen ob nicht bereits eine Instanz davon läuft. Da geht sehr einfach z.B. so
Code:
#!/bin/sh

if [ -e /tmp/getmail.lock ] ; then
 exit
fi
touch /tmp/getmail.lock

## Ab hier der Rest deines Scripts
## und als letzte Aktion vor dem Ende des Scripts

rm /tmp/getmail.lock
# Ende der Datei
So könntest du das Script sogar jede Sekunde aufrufen ohne da Risiko der Mehrfachausführung :)

Gruss

toi
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Danke, hab ich jetzt so umgesetzt.

Meine Datei im Verzeichnis crontabs lautet:

/1 * * * * su Username -c "sh /volume1/homes/Username/getmail.sh &>/dev/null"

Wenn ich den Befehl 'su Username -c "sh /volume1/homes/Username/getmail.sh &>/dev/null"' als root laufen lasse, werden auch die Mails abgeholt.

Soweit so gut!

Nur werden jetzt leider nicht - wie von mir erwartet - die Mails minütlich abgeholt. Ein 'killall cron' sowie starten von cron im Testmodus liefert aber schön minütlich die Einträge
log_it: (Username 10154) CMD (su Username -c "sh /volume1/homes/Username/getmail.sh &>/dev/null")

Wenn dieser Befehl doch minütlich aufgerufen wird und, wenn ich ihn als root laufen lasse, seine Funktion erfüllt, warum werden die Mails dann nicht wie gewollt minütlich abgerufen?
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hast du denn jede Minute eine neue Mail?
Wenn etwas unter cron nicht funzt was direkt auf der Konsole aber funzt, dann liegt das meist daran, dass cron eine eigene Umgebung hat.
Oft gibt es dann Probleme wenn man versucht einen Befehl ohne kompletten Pfad anzugeben. In deinem Fall wäre es das Kommando sh
Code:
which sh
gibt dir den absoluten Pfad zum Kommando an. Würde es mal damit probieren.

Auch musst du nicht unedingt sh aufrufen. Wenn du als erste Zeile deines Code die sogenannte SheBang Zeile drin hast
Code:
#!/bin/sh
und das Script selber mit chmod +x /pfad/zum/script ausführbar machst, dann klappt der Aufruf auch ohne Angabe der Shell
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Nein, ich habe nicht jede Minute eine neue Mail, aber wie schon beschrieben lasse ich die Mails auf dem Server nicht löschen und sie werden dann immer wieder neu heruntergeladen.

Habe jetzt das "sh" entfernt und die Kommandozeile getestet. Funktionierte. Habe dann cron neu gestartet (/opt/etc/init.d/S10cron) und ... es geht immer noch nicht. :( Ich bin hier echt am Verzweifeln!

Woran liegt es eigentlich, dass bei mir die in der Wiki beschriebene Datei /var/log/dovecot-info.log nicht existiert?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Welchen Wikibeitrag meinst du konkret?
Ich könnte mir vorstellen, dass du als "normaler" User Probleme haben könntest nach /var/log zu schreiben resp eine Datei/Verzeichnis dort anzulegen.
Mal probiert die Datei manuell zu erstellen?
Code:
touch /var/log/dovecot-info.log && chmod 0666 /var/log/dovecot-info.log
Ändert sich dadurch etwas beim Aufruf via cron?
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Relativ am Anfang dieses Beitrags wird auf diesen Wiki verwiesen, mit dem ich mich durchgearbeitet habe: http://www.synology-wiki.de/index.php/Externe_Accounts_abrufen

Dort heißt es bei der Beschreibung, wie der Abruf der Mails mit cron automatisiert wird:
"Anschließend kann mit /opt/etc/init.d/S10cron der cron daemon neu gestartet werden. Damit sollten alle Arbeiten abgeschlossen sein und der Mail-Server laufen. Ob alles geklappt hat, kann man sehen, wenn in /var/log/dovecot-info.log Zeilen mit "deliver(Hans):" auftauchen."

Ich wundere mich schon, dass ich nach Beschreibung des Wiki vorgegangen bin und bei der Einrichtung von Dovecot alles geklappt hat, ich bei der Beschreibung von der Automatisierung mit cron aber vom Wiki abweichen muss und den von Dir korrigierten Teil einbauen sollte. Eigentlich müsste doch das Vorgehen nach Wiki auch funktionieren, sonst wäre das Wiki sicherlich längst geändert worden.

Ich habe übrigens das logfile erstellt. Es ergeben sich keine Änderungen. Der automatische Aufruf mit cron funktioniert immer noch nicht!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Im Wiki steht aber ganz klar, dass der Job nicht als root laufen darf
Nachdem das manuelle Abrufen geklappt hat, muss der DiskStation jetzt noch beigebracht werden, die Mails auch automatisch abzurufen. Wie Eingangs erwähnt erlaubt das auf der DS vorinstallierte cron nur den Benutzer root für cronjobs. Tatsächlich wird ausschließlich /etc/crontab ausgelesen und die dort eingetragenen Aufgaben unabhängig vom eingestellten Benutzer (Spalte "who") immer als root ausgeführt. Für das Abholen unserer Mails ist es jedoch zwingend notwendig, dass dies unter dem jeweiligen Benutzer geschieht. Das bedeutet, wenn /homes/Hans/getmail.sh ausgeführt werden soll, so muss das auch von Hans - und nicht root oder einem anderen Benutzer - durchgeführt werden.
Das neue cron kann genau das machen. Dazu legen wir unter /opt/var/cron/crontabs eine neue Datei mit dem Namen "Hans" an. - Das wird unsere crontab für den Benutzer Hans! Dann öffnen wir "Hans" und tragen folgendes ein:
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Du hast recht. Es war ja auch nur ein Versuch, weil es als lokaler User wie im Wiki beschrieben bei mir nicht funktioniert hat.

Ich habe heute morgen alles nochmal durchgespielt und etwas neues probiert. Stand der Dinge ist jetzt Folgender:

Ich habe zwei Möglichkeiten gefunden, wie ich cron automatisch das Skript getmail.sh ausführen lassen kann:

1. Wie im Wiki beschrieben über cron als lokaler User

Ich erstelle eine Datei "Username" im Verzeichnis /opt/var/cron/crontabs mit folgendem Inhalt: (Leerzeichen zwischen den Einträgen)
*/1 * * * * /volume1/homes/Jo/getmail.sh &>/dev/null

Ich starte cron neu mit "/opt/etc/init.d/S10cron"
-> funktioniert nicht. Es werden keine Mails abgerufen.

Der Text mit cron -x test zeigt aber an, dass zumindest der minütliche Aufruf wie geplant erfolgen sollte.

Da dies nicht funktioniert hat, habe ich obige Datei so abgeändert wie von Dir beschrieben:
*/1 * * * * su Username -c "/bin/sh /volume1/homes/Username/getmail.sh"
-> hat (natürlich) auch nicht funktioniert aus den von Dir beschriebenen Gründen

2. Ich habe im Forum recherchiert und ein Wiki über cron gefunden: http://www.synology-wiki.de/index.php/Cron

Mit dieser Anleitung habe ich die Datei /etc/crontab mit folgendem Eintrag ergänzt (Datei war vorher leer; Tabs zwischen den Einträgen)

#minute hour mday month wday who command
1 * * * * Username /volume1/homes/Username/getmail.sh
#Ende

Danach habe ich cron gestoppt und neu gestartet mit:
/usr/syno/etc/rc.d/S04crond.sh stop
/usr/syno/etc/rc.d/S04crond.sh start

-> funktioniert auch nicht!

Jetzt bin ich leider mit meinem (geringen) Latein am Ende und hoffe. Wie kriege ich es denn hin, dass das verdammte cron dieses eine billige Skript aufruft?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Den default cron kannst du vergessen. Der lässt nur root zu. Ausser du legst den Job mittels su User -c an
Wenn es mit dem Username cron File nicht funzt: wie sehen denn die Rechte des Files aus? Bitte mal ein ls -al posten. Ich vermute die Datei gehört root und/oder hat falsche Berechtigungen drauf
 

abdrop

Benutzer
Mitglied seit
03. Aug 2010
Beiträge
36
Punkte für Reaktionen
0
Punkte
6
Ein ls -al liefert:

xx> ls -al
drwxr-xr-x 2 root root 4096 Oct 8 02:39 .
drwxr-xr-x 3 root root 4096 Oct 3 10:53 ..
-rw------- 1 Username users 54 Oct 8 07:37 Username

Ich habe die Rechts so gesetzt wie im Wiki beschrieben. Sollte doch damit OK sein, oder?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat