PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Postfix/maildrop: eMail-Benachrichtigung bei Maileingang



AceTheFace
06.03.07, 11:11
Hallo,

ich habe einem auf meinem Server ein eMail-Postfach eingerichtet auf das er nur per Webmail zugreifen kann. (Soll auch so bleiben)
Nun will er aber nicht jeden Abend sich dort einloggen und schauen ob neue Nachrichten eingetroffen sind.
Gibt es eine Möglichkeit bei Maileingang in dieses Postfach eine simple eMail-Benachrichtigung der Art "Sie haben Post" an eine andere Adresse (nicht auf dem gleichen Server) zu schicken? Evtl. kennt Maildrop ja so eine Regel? Ansonsten würde mir höchstens noch einfallen ein Script zu schreiben, dass den Ordner per Cronjob überwacht....hat da jemand was?

Eine simple Umleitung im Postfix ist keine Lösung, falls das jemand vorschlagen sollte :)

Gruß und danke,
Ace

heatwalker
06.03.07, 11:22
Wär das nicht eine Lösung??

Benachrichtigung bei Mail-Eintreffen (http://www.linuxforen.de/forums/showthread.php?t=5488)

AceTheFace
06.03.07, 11:41
Hm, danke. Hab' das mal ausprobiert, allerdings hab' ich auf die Schnelle nicht raugefunden für was das "\nico" am Beginn der .forward stehen soll. Ist wohl einfach nur der Username. Und die .forward muss wohl auch in das jeweilige $HOME des Benutzers. Allerdings habe ich hier auf dem Server für Mail nur virtuelle Benutzer.
Und das ablegen der .forward unter /home/vmail/domain.tld/user/ (dort liegt ja auch die .mailfilter von maildrop) brachte nichts, die wird nicht beachtet.

Gruß,
Ace

heatwalker
06.03.07, 13:16
Wahrscheinlich weiss Postfix nicht das er die forward auslesen muss.

Die Variable in "main.cf

forward_path =
Beispiel: forward_path = $home$recipient_delimeter$extension,$home/.forward
legt fest wo nach der forward-datei gesucht wird.

Einfach mal prüfen und testen. :)

AceTheFace
06.03.07, 13:36
Richtig, der forward_path war nicht gesetzt und der default natürlich falsch.
Eigentlich müsste der bei mir (/home/vmail/domain.tld/postfach) doch

"/home/vmail/$domain/$user/.forward" heissen, oder? Weil ich mir da nicht ganz sicher war hab ich nun mal einfach für den einen testuser den absoluten Pfad eingetragen. Leider funktioniert das immer noch nicht. Gibt Postfix denn was in den Logs aus sofern es die .forward gefunden hat? Weil dort taucht nichts auf.

Gruß,
Ace

heatwalker
06.03.07, 13:43
Hab jetzt vielleicht noch etwas einfacheres für Dich. :D

In der systemweiten "procmailrc" fügst du z.B. folgendes ein


:0 c
* ^TO.*empfänger@mail.de
| echo "Sie haben neue Nachrichten" | mail -s "Webmail" emfpänger@neue.mail.de


"echo" habe ich nur eingesetzt damit die original mail nicht im Body auftaucht.
Eventuell gibt es bessere Lösungen, aber das habe ich eben getestet und funktioniert soweit. :rolleyes:


/etc/init.d/postfix reload
nicht vergessen

AceTheFace
06.03.07, 13:57
Hm, ich setze ja eigentlich maildrop als Filter ein. Jetzt noch procmail? Dazu müsste ich wohl in der main.cf "mailbox_command = procmail -foo" eintragen, richtig? Was passiert nun mit den Mails, die auf obige Regel nicht matchen? Werden die dann weggeschmissen? Irgendwie muss Postfix die ja dann wieder weiter an maildrop schieben.

Gruß,
Ace

heatwalker
06.03.07, 14:19
maildrop kenne ich nicht.

Denke aber das es wahrscheinlich dort eine ähnliche
Lösung möglich sein müsste.

michael.sprick
06.03.07, 14:19
Hallo,

eine Möglichkeit wäre, das maildrop Kommando 'cc' zu benutzen:

#.mailfilter
cc "| script/welches/die/sms/sendet.pl"
Durch das cc-Kommando wird die Zustellung ja nicht abgebrochen. Das bedeutet, die Mail stößt einmal das Skript an und wird danach normal zugestellt.

Eine andere Möglichkeit sind die BCC Maps von postfix. Siehe dazu
recipient_bcc_maps in der Postfix Doku...

AceTheFace
06.03.07, 14:46
eine Möglichkeit wäre, das maildrop Kommando 'cc' zu benutzen:

#.mailfilter
cc "| script/welches/die/sms/sendet.pl"


Genau so eine Lösung suche ich danke. Meine .mailfilter für das entsprechende Postfach sieht nun so aus:



cc "|/usr/local/bin/newmail.notify"

if (/^X-Spam-Flag:.*YES.*/ )
{
exception {
to "$HOME/domain.tld/user/.SPAM/."
}
}

to "$HOME/domain.tld/user/."
exit


Allerdings bricht maildrop nun mit folgender Meldung ab:
" Command died with status 1: "/usr/local/bin/mymaildrop"

Die mymaildrop sieht so aus (brauche ich um die eMail-Adresse auf die Ordnerstruktur zu mappen):



#!/bin/bash

TARGET=`echo $1 | sed -r "s/(.*)\@(.*)/\2\/\1/"`
/usr/bin/maildrop /home/vmail/${TARGET}/.mailfilter


Was läuft falsch?

Gruß und danke,
Ace

michael.sprick
06.03.07, 16:36
hmm....

/usr/local/bin/newmail.notify ist ausführbar? Auch für den User, mit dem es aufgerufen wird?

Afaik setzt ein aufgerufenes Skript die Variable $EXITCODE von maildrop... da könnte also der Hase im Pfeffer liegen.

AceTheFace
06.03.07, 16:42
hmm....

/usr/local/bin/newmail.notify ist ausführbar? Auch für den User, mit dem es aufgerufen wird?

Afaik setzt ein aufgerufenes Skript die Variable $EXITCODE von maildrop... da könnte also der Hase im Pfeffer liegen.

Ja die Rechte müssten passen. Hab auch gerade mal ein 777 drübergejagt. Selbes Ergebnis.

Gruß,
Ace

AceTheFace
09.03.07, 10:33
Hat noch jemand eine Idee?

/usr/local/bin/newmail.notify wird nicht ausgeführt. Habe ins dortige skript ein "touch /tmp/blubb" eingefügt. Diese Datei wird aber nicht erzeugt.

Gruß,
Ace

michael.sprick
09.03.07, 10:50
Kannst Du das Script newmail.notify mal posten?

zum Eingrenzen kannst Du ja evtl. noch folgendes um die cc Anweisung rumbauen:



log "fuehre cc-Anweisung aus..."
cc "| /dein/script"
log "skript ausgefuehrt..."


Oder steht vielleicht jetzt schon irgendwas in der maildrop.log drin, was Aufschluss geben könnte?

AceTheFace
09.03.07, 12:33
Also geloggt wird auch nur
"!Err: |/usr/local/bin/newmail.notify"

Aber ich hab jetzt mal ein bißchen rumgespielt. Wenn ich gespeicherte Mail aus dem Postfach (=Datei) an das Script pipe funktionierts problemlos.
Nur direkt nicht...

Gruß,
Ace

michael.sprick
09.03.07, 13:16
ich kann mir eigentlich nur vorstellen, dass irgendwas mit den Rechten nicht stimmt...

Hat maildrop bzw. Dein vmail User wirklich ausreichend Rechte für das Skript bzw. den Pfad dorthin?

Poste doch mal Deine main.cf, die master.cf und das skript...

Außerdem mal die Rechte für den gesamten Pfad zu Deinem newmail.notify

michael

AceTheFace
09.03.07, 13:34
Also gut:

main.cf:


myhostname=EINHOST.serverkompetenz.net
mynetworks=127.0.0.1
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_forwardings.cf mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/mail.cert
smtpd_tls_key_file = /etc/postfix/mail.key
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
mydestination = localhost,EINHOST.serverkompetenz.net,localhost.se rverkompetenz.net
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
message_size_limit = 50000000


master.cf


smtp inet n - - - - smtpd
#submission inet n - - - - smtpd
# -o smtpd_etrn_restrictions=reject
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
#qmgr fifo n - - 300 1 oqmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/mymaildrop ${recipient}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,rej ect
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_chec ks,no_header_body_checks
-o smtpd_bind_address=127.0.0.1


script:


#!/bin/bash
formail -X From: -X Subject: >> /tmp/newmail.notify
echo "" >> /tmp/newmail.notify
echo "__________________________________________________ _________________" >> /tmp/newmail.notify
echo "Diese Nachricht wurde automatisch generiert. Bitte nicht antworten!!" >> /tmp/newmail.notify
cat /tmp/newmail.notify | mail -s "Neue Mail" copy@domain.tld
rm -f /tmp/newmail.notify
echo "Hallo," > /tmp/newmail.notify
echo "" >> /tmp/newmail.notify
echo "es ist eine neue E-Mail im Postfach eingegangen:" >> /tmp/newmail.notify
echo "" >> /tmp/newmail.notify
echo "Details:" >> /tmp/newmail.notify


Rechte:


-rwxrwxrwx 1 vmail vmail 608 2007-03-09 13:32 /usr/local/bin/newmail.notify
-rwxrwxrwx 1 vmail root 71 2007-03-09 13:25 /tmp/newmail.notify

(radikal gesetzt zum Testen...)

Hab auch das script mal ins Maildir kopiert. Hat auch nicht funktioniert..


Gruß,
Ace

AceTheFace
17.03.07, 13:19
Das Problem besteht immer noch, hat noch jemand eine Idee?

Gruß,
Ace