Syntax des getmailrc - Files - für Übergabe an Sendmail

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

SynNAS

Benutzer
Registriert
07. Jan. 2012
Beiträge
174
Reaktionspunkte
0
Punkte
16
Hallo zusammen,

habe inzwischen schon viele viele Versuche durchlaufen, und bin auch schon recht weit gekommen, aber irgend eine Kleinigkeit fehlt!

Was ist das Ziel:
============
Meine DS soll die Mails von einem externen POP3 Postfach abholen (dort kommen alle *@meineDomain.de Mails an), und lokal in die Mailboxen legen.
=> dazu soll getmail zum Einsatz kommen.
=> getmail soll dann die empfangenen Mails an Sendmail übergeben, damit diese lokal in die Mailboxen der User einsortiert/abgelegt werden.

Was geht:
========
getmail läßt sich (via admin) aufrufen, holt die Mails ab,
und übergibt diese an Sendmail. Sendmail legt ALLE Mails in EIN Postfach.

Ziel ist:
=====
daß Sendmail die abgeholten Mails je nach Empfänger in das spezielle Postfach des Empfängers reinlegt.


Folgendes getmailrc File kommt zum Einsatz:
=================================
Rich (BBCode):
[options]
delete = false
[retriever]
type = SimplePOP3SSLRetriever
server = pop3.MeinProvider.net
port = 995
username = MeinUserBeimProvider
password = GeheimesPasswort

[destination]
type = MDA_external
path = /usr/syno/mailstation/sbin/sendmail
arguments = ("-i", "MEIN_Lokaler_UserName", )

Dies führt dazu, daß der Aufruf von getmail (via admin) [getmail -g ~admin/.getmail -l -n],
alle die Mails beim Provider abholt, diese an Sendmail übergibt, und Sendmail legt ALLE Mails in das Postfach von "MEIN_Lokaler_UserName".

So weit so gut,

ABER ich möchte ja daß Sendmail die abgeholten Mails je nach Empfänger in das spezielle Postfach des Empfängers reinlegt!

Also irgend wie muß ich Sendmail via den "arguments" den User übergeben, der in der jeweiligen Mail als Empfänger drin steht,
oder ich muß Sendmail sagen, daß er einfach den Empfänger der jeweiligen Mail als User, und somit dessen Zielpostfach nimmt.

Nur wie???

Ich komme nun überhaupt nicht mehr weiter.
Wer kann mir bitte helfen!!??!!


PS: folgendes habe ich schon versucht:
==============================
entsprechend der Doku von getmail (habe ich unter http://pyropus.ca/software/getmail/configuration.html#parameter-tuplestrings gefunden),
gibt es die Variabeln
%(recipient) — envelope recipient address
%(local) — local-part of the envelope recipient address
%(domain) — domain-part of the envelope recipient address
So wie es ausschaut, sind die Variablen aber nur im Falle eines "multidrop retriever class" Retriever aktiv.
Bei mir kann ich die Mails aber nur via SimplePOP3SSLRetriever holen. => die Variablen sind wohl nicht aktiv.

denn wenn ich oben anstelle MEIN_Lokaler_UserName %(recipient)

Rich (BBCode):
[destination]
type = MDA_external
path = /usr/syno/mailstation/sbin/sendmail
arguments = ("-i", "%(recipient)", )

reinschreibe, so kommt als Empfänger immer nur % und eine Fehlermeldung.


Grüße Stefan
 
...

oder ich muß Sendmail sagen, daß er einfach den Empfänger der jeweiligen Mail als User, und somit dessen Zielpostfach nimmt.

Nur wie???
...

Hat Sendmail so was wie eine Inbox?

Wenn ich alle Mails da rein bekomme,
dann gehe ich davon aus, daß Sendmail richtig verteilt.

Grüße Stefan
 
Ich hab's gefunden!!

...

ABER ich möchte ja daß Sendmail die abgeholten Mails je nach Empfänger in das spezielle Postfach des Empfängers reinlegt!

Also irgend wie muß ich Sendmail via den "arguments" den User übergeben, der in der jeweiligen Mail als Empfänger drin steht,
oder ich muß Sendmail sagen, daß er einfach den Empfänger der jeweiligen Mail als User, und somit dessen Zielpostfach nimmt.

Nur wie???

...

Ich hab's gefunden!!!

es ist der Parameter "-t"!!!

In der Dokumentation über Postfix (siehe http://www.postfix.org/sendmail.1.html) habe ich im Abschnitt "sendmail - Postfix to Sendmail compatibility interface"
die Komando-Beschreibung gefunden.
dort steht unter
======= schnipp ==========
-t
Extract recipients from message headers. These are
added to any recipients specified on the command line.
======= schnipp ==========

somit steht jetzt im Bereich [destination]:
Rich (BBCode):
[destination]
type = MDA_external
path = /usr/syno/mailstation/sbin/sendmail
arguments = ("-i", "-t" )

das "-t" und KEIN "User" mehr drin.
=> die Mails werden den entsprechenden Mailboxen der Empfänger zugeordnet.
Sogar meine unter " /usr/syno/mailstation/etc/aliases " angegebenen Aliases werden auch berücksichtigt! :).

Jetzt muß ich nur noch (auch Neuland für mich)
den Aufruf von getmail durch "cron" automatisieren.

Grüße Stefan
 
-t, du weisst was passieren kann? Viele Spams enthalten irgendeinen Scheiss als Empfänger im quelltext. Dann wird sendmail solche Mails wohl nach extern schicken und du landest sehr sehr schnell auf Blacklisten mit deiner IP. Gib dem sendmail den Empfänger lieber explizit vor ODER ruf das getmail Script gleich unter dem User (Empfänger) auf. Denn getmail stellt die Mails normalerweise automatisch in die Mailbox des Users unter dem es aufgerufen wurde
 
-t, du weisst was passieren kann? Viele Spams enthalten irgendeinen Scheiss als Empfänger im quelltext. Dann wird sendmail solche Mails wohl nach extern schicken ...
Hmm,
Würde dann sendmail diese "Spams" über den von mir eingetragenen Relay versenden, oder selbst versenden wollen?

Gab es da nicht auch noch eine Möglichkeit, daß alle "unbekannten" Mails an einen Internen User umgeleitet werden können?
So würde man immerhin bemerken, wenn Spams diesen Weg ausnützen wollten.
Übrigens, ich habe KEINE feste IP, deshalb ja den ganzen Umweg via SMTP-Relay und Externen (Sammelpostfach) bei einem Provider.

... Gib dem sendmail den Empfänger lieber explizit vor ...
Genau das wollte ich ursprünglich ja, aber wie oben beschrieben, die Variable %(recipient) ist wohl "leer".
Gibt es noch eine andere Möglichkeit, daß getmail den Empfänger aus jeder empfangenen Mail liest, und dann an Sendmail übergibt?

... ODER ruf das getmail Script gleich unter dem User (Empfänger) auf. Denn getmail stellt die Mails normalerweise automatisch in die Mailbox des Users unter dem es aufgerufen wurde

Ja das wäre auch eine Möglichkeit, nur dann müßte ich pro Mail feststellen, wer der Empfänger ist, und je nach dem das Script noch mal aufrufen.
(geht das überhaupt, ???)
Im ersten Teil des Scriptes hole ich die Mail, erst dann könnte getmail erfahren, wer der Empfänger ist, dann kann ich doch nicht noch mal ein getmail-Sript unter einem anderen User aufrufen?? oder?

Grüße Stefan
 
Hmm,
Würde dann sendmail diese "Spams" über den von mir eingetragenen Relay versenden, oder selbst versenden wollen
sendmail wird den normalen Transport verwenden. Wenn du also einen Relay eingetragen hast, wohl über den Relay und sonst direkt

Gab es da nicht auch noch eine Möglichkeit, daß alle "unbekannten" Mails an einen Internen User umgeleitet werden können?
So würde man immerhin bemerken, wenn Spams diesen Weg ausnützen wollten.
Übrigens, ich habe KEINE feste IP, deshalb ja den ganzen Umweg via SMTP-Relay und Externen (Sammelpostfach) bei einem Provider.
Da würde also das Risiko bestehen, dass du die IP deines Providers auf Blacklisten befördern würdest. Das wird er sicher mögen ;-)


Genau das wollte ich ursprünglich ja, aber wie oben beschrieben, die Variable %(recipient) ist wohl "leer".
Gibt es noch eine andere Möglichkeit, daß getmail den Empfänger aus jeder empfangenen Mail liest, und dann an Sendmail übergibt?
Holst du denn Mails einer Sammelmailbox ab und willst diese empfängerbasiert auf der DS in verschiedene Mailboxen sortieren? Oder sollen alle Mailboxen auf der DS alle diese Mails erhalten?


Ja das wäre auch eine Möglichkeit, nur dann müßte ich pro Mail feststellen, wer der Empfänger ist, und je nach dem das Script noch mal aufrufen.
(geht das überhaupt, ???)
Im ersten Teil des Scriptes hole ich die Mail, erst dann könnte getmail erfahren, wer der Empfänger ist, dann kann ich doch nicht noch mal ein getmail-Sript unter einem anderen User aufrufen?? oder?

Grüße Stefan
ich glaub der einzige Weg, wenn du wirklich pro Mail den Empfänger haben musst, ist schon sendmail mit -t
Du musst dir einfach des Risikos bewusst sein, da du dich hierbei auf einfach zu fälschende Daten eines beliebigen Clients verlassen musst. Du solltest versuchen den Postfix so abzusichern, dass er nicht beliebige Empfänger von sendmail aktzeptiert. Du könntest z.B. im master.cf einen smtp Dienst für 127.0.0.1 definieren und dem dann nur deine Domain als Empfänger zulassen. sendmail schickt an diesen Dienst und der verwirft wenn die Domain ned passt. ABER wenn du an master.cf einen Dienst definieren willst, dann musst du verhindern, dass das Startscript der Mailstation diesen Eintrag wieder überschreibt. Denn das Startscript erstellt bei jedem Start eine Zeile in der Config, welche deinem smtp Dienst auf 127.0.0.1 widersprechen würde und Postfix würde crashen
 
Verfolge den Weg getmail holt mails und gibt diese an Sendmail-nicht mehr ausführen!


Genau das wollte ich ursprünglich ja, aber wie oben beschrieben, die Variable %(recipient) ist wohl "leer".
Gibt es noch eine andere Möglichkeit, daß getmail den Empfänger aus jeder empfangenen Mail liest, und dann an Sendmail übergibt?
Holst du denn Mails einer Sammelmailbox ab und willst diese empfängerbasiert auf der DS in verschiedene Mailboxen sortieren? Oder sollen alle Mailboxen auf der DS alle diese Mails erhalten?

Ich hole die Mails von einer "Sammelmailbox" ab und möchte diese empfägnerbasiert auf der DS in verschiedene Mailboxen sortieren.
Allerdings ist das keine richtige "Sammelmailbox" sondern ein normaler POP3 Account, obwohl er alle Mails meiner Domain "sammelt".
Ich kann mit getmail diese "Sammelbox" NICHT mit dem Typ "MultidropPOP3SSLRetriever" abrufen.
Es klappt nur "SimplePOP3SSLRetriever"
Aber ich habe einen "Workarround" gefunden" (siehe unten!)



ich glaub der einzige Weg, wenn du wirklich pro Mail den Empfänger haben musst, ist schon sendmail mit -t
Du musst dir einfach des Risikos bewusst sein, da du dich hierbei auf einfach zu fälschende Daten eines beliebigen Clients verlassen musst. Du solltest versuchen den Postfix so abzusichern, dass er nicht beliebige Empfänger von sendmail aktzeptiert. Du könntest z.B. im master.cf einen smtp Dienst für 127.0.0.1 definieren und dem dann nur deine Domain als Empfänger zulassen. sendmail schickt an diesen Dienst und der verwirft wenn die Domain ned passt. ABER wenn du an master.cf einen Dienst definieren willst, dann musst du verhindern, dass das Startscript der Mailstation diesen Eintrag wieder überschreibt. Denn das Startscript erstellt bei jedem Start eine Zeile in der Config, welche deinem smtp Dienst auf 127.0.0.1 widersprechen würde und Postfix würde crashen

Ich teile Deine Bedenken sehr, und werde vor allem deswegen den Weg
Empfang mit getmail, => weiterleiten an Sendmail via -t Komando nicht mehr weiter verfolgen. (ob wohl der Weg geht!)
Das ist mir wegen den Spams zu gefährlich!!


Ersatzlösung:
==========


Nach längerem und genauerem "studieren" der getmail - Doku,
habe ich den Weg
Empfang von der "quasi" Sammelmailbox via getmail und dem Typ "SimplePOP3SSLRetriever"

Die Verteilung übernimmt nun doch getmail mit dem destination Typ "MultiGuesser"
(Richtig wäre ja "MultiSorter", aber dann müsste ja meine "Sammelmailbox" auch eine richtige "Multidrop"-Mailbox sein, die auch die passenden envelope-Daten beim Abruf liefert, habe ich aber NICHT)

"MultiGuesser" kann zwar auch mal daneben langen, aber in den meisten Fällen, wird er richtig "einsortieren"
Wenn es kein richtiges "Ziel" gibt, wird auf default, also ein "lokale" Sammel-Mailbox verteilt, somit geht nichts verloren.

Wenn ich getmail richtig verstanden habe, wird auf diese art keine Mail nach außen versendet,
sondern NUR in eines der festgelegten lokalen Ziele, oder in die lokale Sammel-Mailbox.

Liege ich da richtig?

Damit dürfte die Gefahr, die beim weiterleiten an Sendmail besteht (Spam - Adressen im Adresskopf....)
gebannt sein. (oder??)

OK, ich muß an dieser Stelle in dem "Verteilerteil" auch alle aliase noch mal berücksichtigen!

Aber das ist mir die Sicherheit wert!

Mein getmailrc schaut nun so aus:
Rich (BBCode):
[options]
delete = false
[retriever]
type = SimplePOP3SSLRetriever
# type = MultidropPOP3SSLRetriever
# -- wäre voraussetzung für destination type MultiSorter
# -- ist bei mir aber kein richtiger SammelPOP3-Mailbox lässt sich nicht anmelden.
server = pop3.MeinProvider.net
port = 995
username = MeinUserName
password = GeheimesPassword
# Our domain mailbox mailhost records the envelope recipient address in a
# new Delivered-To: header field at the top of the message.
# envelope_recipient = delivered-to:1   -- muss bei mir auskommentiert werden, sonst gehts nicht!

[destination]
# type = MultiSorter
type = MultiGuesser
default = [postmaster_lokalerUser1]
locals = (
  ("lokalerUser1@MeineDomain.de",              "[lokalerUser1]"),
  ("lokalerUser1.MeineDomain@MeineDomain.de",     "[lokalerUser1]"),
  ("alias0@MeineDomain.de",              "[lokalerUser1]"),
  ("alias1@MeineDomain.de",              "[lokalerUser1]"),
  ("alias2@MeineDomain.de",              "[lokalerUser1]"),
  ("alias3@MeineDomain.de",              "[lokalerUser1]"),
  ("alias4@MeineDomain.de",              "[lokalerUser1]"),
  ("alias5@MeineDomain.de",              "[lokalerUser1]"),
  ("alias6@MeineDomain.de",              "[lokalerUser1]"),
  ("alias7@MeineDomain.de",              "[lokalerUser1]"),
  ("alias8@MeineDomain.de",              "[lokalerUser1]"),
  ("alias9@MeineDomain.de",              "[lokalerUser1]"),
  ("Initialien_l-User1@MeineDomain.de",  "[lokalerUser1]"),
  ("lokalerUser2@MeineDomain.de",        "[lokalerUser2]"),
  ("alias21@MeineDomain.de",             "[lokalerUser2]"),
  ("Initialien_l-User2@MeineDomain.de",  "[lokalerUser2]"),
  ("lokalerUser3@MeineDomain.de",        "[lokalerUser3]"),
  ("alias31@MeineDomain.de",             "[lokalerUser3]"),
  ("Initialien_l-User3@MeineDomain.de",  "[lokalerUser3]"),  
  ("lokalerUser4@MeineDomain.de",        "[lokalerUser4]"),
  ("alias41@MeineDomain.de",             "[lokalerUser4]"),
  ("alias42@MeineDomain.de",             "[lokalerUser4]"),
  ("Initialien_l-User4@MeineDomain.de",  "[lokalerUser4]"),
  ("lokalerUser5@MeineDomain.de",        "[lokalerUser5]"),
  ("alias51@MeineDomain.de",             "[lokalerUser5]"),
  ("alias42@MeineDomain.de",             "[lokalerUser5]"),
  ("Initialien_l-User5@MeineDomain.de",  "[lokalerUser5]")
  )

# default-User - bekommt alle Mails die nicht durch die obige Liste erfasst sind!
[postmaster_lokalerUser1]
type = Maildir
path = ~pmlokalerUser1/.Maildir/
user = pmlokalerUser1

# lokale User der durch die Zuordnung der obigen Liste eine Mail zugeordnet bekommt
[lokalerUser1]
type = Maildir
path = ~lokalerUser1/.Maildir/
user = lokalerUser1

[lokalerUser2]
type = Maildir
path = ~lokalerUser2/.Maildir/
user = lokalerUser2

[lokalerUser3]
type = Maildir
path = ~lokalerUser3/.Maildir/
user = lokalerUser3

[lokalerUser4]
type = Maildir
path = ~lokalerUser4/.Maildir/
user = lokalerUser4

[lokalerUser5]
type = Maildir
path = ~lokalerUser5/.Maildir/
user = lokalerUser5

#noch klaeren, ob das so stimmt
#

So wie es ausschaut, macht nun getmail auch genau was es soll.
Es sortiert zumindestens einwandfrei.

Aufruf erfolgt nun von der root aus mit
getmail -g /opt/bin -l -n
somit sollte der Aufruf via cron-Job auch leichter gehen??

(Parameter müssen später, wenn alles noch geht, angepasst werden,
wie z.B. daß nach dem abholen gelöscht wird (auch im getmailrc ganz oben zu ändern)

Ich hoffe, daß ich nun die Spam-Gefahr gebannt habe.

Siehst Du das auch so?

Grüße Stefan
 
Cool wusste ned, dass man getmail derartig nutzen kann :-) Ohne es ganz sicher zu wissen würde ich mal sagen, die Spamgefahr müsste gebannt sein, weil du ja nur noch explizite Empfänger zulässt und alles andere zentral in ein Postfach sortierst. Dat sollte eigentlich so funzen
 
Cool wusste ned, dass man getmail derartig nutzen kann :-) ...
Uii, da wachse ich als Linux-Anfänger aber!!
Wie heist es so schön: Ein blindes Huhn findet auch mal ein Korn" :D:D

Immerhin es geht so,
muss es nur noch via cron-Job automatisieren.

...würde ich mal sagen, die Spamgefahr müsste gebannt sein, weil du ja nur noch explizite Empfänger zulässt und alles andere zentral in ein Postfach sortierst. Dat sollte eigentlich so funzen

Na dann bin ich froh daß Du es auch so siehst!

Übrigens noch mal vielen vielen Dank für Deine geduldige Hilfe,
und vor allem auch für die Hinweise auf die "Gefahren!!!!"

Grüße Stefan!
 
Hallo "jahlives"

Cool wusste ned, dass man getmail derartig nutzen kann :-) Ohne es ganz sicher zu wissen würde ich mal sagen, die Spamgefahr müsste gebannt sein, weil du ja nur noch explizite Empfänger zulässt und alles andere zentral in ein Postfach sortierst. Dat sollte eigentlich so funzen

ich möchte dieses Thema noch mal hervorholen.

So wie oben beschrieben, läuft meine DS mit getmail nun schon seit 1 1/2 Jahren sehr zuverlässig,
und sortiert die abgeholten Mails einwandfrei in die lokalen Postfächer.
Der Rückweg via verschiedenen Identitäten (bei Roundcoube direkt, als auch via e-Mail-Clients, die sich am Mailserver der DS anmelden [in meinem Fall Thunderbird])
geht auch einwandfrei.

Allerdings läuft meine DS 212+ noch auf DSM 3.2, und ich wollte nun auf DSM 4.2 Updaten.

Ich habe von Dir, bzw. Euch ja auch schon unter http://www.synology-forum.de/showthread.html?27622-Kann-keine-externen-POP-Konten-mehr-abfragen gelesen, daß nach einem Update auf 4.0 der externe POP 3 Abruf nicht mehr geht.
Ist das immer noch so, oder läuft bei Dir / Euch getmail wieder?

Denn mein ganzes Konzept basiert ja auf den pop3-Abruf von getmail.

Wie gestalte ich am besten das Update auf 4.2, ohne das ich alles wieder neu einstellen muss?
Was meinst Du?

Wie stelle ich es am besten an, daß ich mir einen eventuellen Rückschritt auf die jetzige Installation / Konfiguration offen halte?

Grüße Stefan
 
Zuletzt bearbeitet:
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