shyper.net


Plesk X-Delivered-To

Posted in von shyper am 29. Jan. 2010

Einige Kunden benutzen den David von Tobit. Und damit das Teil als Mailserver ordentlich funktioniert werdem für ein E-Mail Account einfach Alias’e erstellt, die dann vom David-Server gepollt werden. Nun braucht David jedoch den X-Delivered-To Eintrag im Header, damit er die Mails intern verteilen kann. Das haben wir letztlich mit einem kleinen Mail-Handler für Plesk gelöst. Das ganze funktioniert jedoch nur unter QMail richtig. Hier einmal das Script
NEUES SCRIPT
#!/bin/bash
echo "X-Delivered-To: ${3}"
cat

ALTES SCRIPT
#!/bin/bash

# Settings
TMPPATH=/tmp

# Utilities
RM=rm
CAT=cat
SED=sed
MKTEMP=mktemp

# Incomming
CONTEXT=${1}
FROM=${2}
TO=${3}

# Read mail into file
MKTMPFILE=`${MKTEMP} -q ${TMPPATH}/${1}.XXXXXXXXXX`
MSGTMP=${MKTMPFILE}
${CAT} > ${MSGTMP}

# Insert mail header
${SED} -i "1 iX-Delivered-To: ${TO}" ${MSGTMP}

# Output mail
${CAT} ${MSGTMP}

# Delete temp file
${RM} -f ${MSGTMP}

Das ganze haben wir im Ordner /usr/local/psa/handlers/user-handlers/ als xdeliveredto gespeichert, (Achtung: der Ordner muss erst erstellt werden!)
die Datei Ausführbar gemacht (chmod +x /usr/local/psa/handlers/user-handlers/xdeliveredto) und als Handler registriert
/usr/local/psa/admin/sbin/mailmng --add-handler --handler-name xdeliveredto --handler-type global --executable /usr/local/psa/handlers/user-handlers/xdeliveredto --context xdeliveredto --hook before-local --priority 30

Hoffe damit kann man einigen viel Zeit und Arbeit ersparen!

23 Kommentare zu 'Plesk X-Delivered-To'

Kommentare als RSS oder TrackBack von 'Plesk X-Delivered-To'.

  1. Andreas Mollat sagt,

    am 5. Mrz. 2010

    Vielen Dank für den guten Tip mit der Einbindung von eigenen Filtern in Plesk. Ich mußte selber gerade ein Envelope-To einfügen für einen Abruf durch fetchmal und bin halb krank geworden, weil Plesk mit den dot-qmails macht was es will. Ich hatte auch schon selber ein Skript geschrieben, das ich Euch nicht vorenthalten möchte, weil es etwas einfacher und schneller ist:

    ——————————————
    #!/bin/sh
    echo “X-Envelope-To: ${3}”
    cat
    ——————————————

    Gruß! Andreas aus Hannover

  2. shyper sagt,

    am 19. Mrz. 2010

    Hatte mein Script vor einiger Zeit auch so aufgebaut gehabt wie deines. Wollte die Änderung noch mal irgendwann hier Posten, aber das hast du jetzt ja gemacht ;)


  3. am 16. Apr. 2010

    Guten Tag

    Soweit super, danke für das Scripts. Von gewissen Absender vedoppeln Sich die E-Mails aber im Tobit-Posteingang. An was kann das liegen?

  4. shyper sagt,

    am 26. Apr. 2010

    Wird als Server evtl. Postfix genutzt?
    Wenn ja, könnte es sein, dass die Mail zwei Empfänger hat und dann entsprechend oft bearbeitet wird. Dann wird unter Umständen der falsche X-Delivered-To wert gesetzt.


  5. am 7. Jul. 2010

    [...] habe das ganze hier gefunden und für meine Zwecke etwas abgeändert. ITDavid.fx, Plesk, qmail ← Core-Temp [...]

  6. juergen sagt,

    am 11. Okt. 2010

    Vielen Danke,

    ich habe die letzten Stunden damit verbracht in einer Mailbox mit Änderung der .qmail Datei und einer eigenen .procmailrc Datei das selbe zu erreichen. Hat zwar auch funktioniert, aber das hier ist viel eleganter, da Plesk ja gerne die .qmail Datei überschreibt.

    Btw. ich musste bei Plesk 8.2 das den Aufruf von mailmng etwas abändern:

    –handler-type global wurde zu –global
    –priority 30 kennt Plesk 8.2 nicht also habe ich es weggelassen

  7. VVsta sagt,

    am 5. Nov. 2010

    Hallo, wenn ich das nun so Anwende habe ich folgenden Effekt im SMTP Header:

    X-Envelope-To: catch-all@domain.tld
    Received: (qmail 6710 invoked by uid 110); 5 Nov 2010 12:27:17 +0100
    Delivered-To: 47-mail@domain.tld
    X-Envelope-To: mail@domain.tld

    Ich bin am Verzweifeln…

  8. shyper sagt,

    am 5. Nov. 2010

    Eine unsaubere Lösung wäre einfach alle von qmail generierten x-envelope-to Zeilen zu entfernen.
    Einfach mal an dem cat folgendes hängen:
    | grep -v ‘^X-Envelope-To’

    allerdings würden dabei auch Zeilen im Mailtext entfernt die so beginnen.

  9. VVsta sagt,

    am 5. Nov. 2010

    Okay, nun ist aber das Problem, dass ich ein Envelope-To: Feld haben muss, damit David das auswerten kann.
    Daher muss es doch möglich sein, dass obere Feld welche die Catch All Adresse beschreibt auszublenden…

  10. shyper sagt,

    am 6. Nov. 2010

    Ja aber genau das sollte doch dann funktionieren, nachdem das grep eingebaut wurde?
    Ansonsten einfach mal mit x-delivered-to testen, das funktioniert zumindest bei uns ganz gut ;)

  11. VVsta sagt,

    am 6. Nov. 2010

    Wenn ich deinen Parameter eingebaut habe, habe ich nur noch Deliverted-To: 47-mail@domain.tld und mehr nicht

  12. VVsta sagt,

    am 8. Nov. 2010

    Habe nun mit X-Delivered-To getestet, gleicher Fehler…
    Werde noch wahnsinnig…

  13. shyper sagt,

    am 8. Nov. 2010

    Dann verstehe ich das Problem evtl. nicht genau. Führt er evtl. das Script zwei mal aus und fügt deshalb zwei Header-zeilen ein?
    Und welcher wäre denn der richtige Eintrag? catch-all@ oder mail@ ?

  14. VVsta sagt,

    am 8. Nov. 2010

    Hallo, der Mail@ wäre der Richtige eintrag… Habe die Maschine nun schon neu Aufgesetzt allerdings keine änderung.

    1und1 Root Server mit openSUSE 11.0 und Plesk 9.5.3 und Qmail.

  15. shyper sagt,

    am 8. Nov. 2010

    Hmm. Ich denke das Script wird dann zweimal ausgerufen. Bitte mal ein weiteres test-echo vr dem cat einbauen. Beispiel:
    echo “X-Test: Yes”

    Wenn diese Zeile dann zweimal vorkommt muss das Script leider die alte Mail auf einen vorhandenen Header prüfen.

  16. VVsta sagt,

    am 9. Nov. 2010

    X-SMTPTOFIELD: Envelope-To:
    X-Delivered-To: catch-all@domain.tld
    X-Test: Yes
    Received: (qmail 10381 invoked by uid 110); 9 Nov 2010 14:04:14 +0100
    Delivered-To: 11-mail@domain.tld
    X-Delivered-To: mail@domain.tld
    X-Test: Yes

    Wird wohl 2x Ausgeführt, aber warum??
    Was hab ch nun für eine Möglichkeit?

  17. shyper sagt,

    am 9. Nov. 2010

    Dann mal das hier probieren:

    #!/bin/bash
    MAILTEXT=`cat`

    if [[ "$MAILTEXT" =~ "X-DELSCRIPT: YES" ]]
    then
    NOTHING=”true”
    else
    echo “X-Delivered-To: ${3}”
    echo “X-DELSCRIPT: YES”
    fi

    printf “%s\n” “$MAILTEXT”

  18. VVsta sagt,

    am 9. Nov. 2010

    Dann bekomme ich Unknown Sender mit Unknwon Subject, das scheint garnicht zu Funktionieren…

  19. VVsta sagt,

    am 13. Nov. 2010

    Keine lösung?

  20. shyper sagt,

    am 16. Nov. 2010

    Hatte vorher keine Zeit. Stehe jetzt aber mit nem anderen Script vor dem Selben problem. Ich werde die Lösung dann nachher hier posten ;)

  21. shyper sagt,

    am 16. Nov. 2010

    So hab meins fertig. Habe es auch gleich fuer X-Delivered-To angewendet. Ist jetzt aber ein Perl-Script geworden ;)

    edit: wordpress hats verunstaltet… hier ein Link:
    http://shyper.net/newxdel.txt

  22. VVsta sagt,

    am 17. Nov. 2010

    Shyper, ich danke dir vielmals!
    Es Funktioniert.


  23. am 10. Mrz. 2011

    [...] habe das ganze hier gefunden und für meine Zwecke etwas [...]

Kommentar hinterlassen: