chris personal blag

3Jul/102

E-Mail mit Haltbarkeitsdatum mit Exim

Noch flexibler als die Labels in E-Mail-Adressen vom letzten Mal sind Adressen mit Konditionen,
hier nutzer#before#20101224@domain, die Adresse ist bis zum 24.12.2010 gültig, und
nutzer#fromdomain#example.com@domain, die Adresse ist nur für Mails von example.com gültig.

Implementation in Exim nach dem Break.

Wieder braucht es (fast) nur eine neue Datei im Config-Ordner.
Anzulegen ist diesmal /etc/exim4/conf.d/router/895_exim4_config_user_condition mit folgendem Inhalt:

user_condition:
  driver                = redirect
  allow_defer
  allow_fail
  domains               = +local_domains
  caseful_local_part    = false
  condition             = ${if \
        or {\
        {\
                # suffix contains #before# and date (yyyymmdd) is not yet #before#yyyymmdd
                and {\
                {\
                        eq {${sg{$local_part_suffix}{^#([^#]+)#[0-9]\{8\}\$}{\$1}}}{before}\
                }{\
                        lt {$tod_logfile}{${sg{$local_part_suffix}{^#[^#]+#([0-9]\{8\})\$}{\$1}}}\
                }\
                }\
        }{\
                # suffix contains #fromdomain# and the domain-name of sender
                and {\
                {\
                        eq {${sg{$local_part_suffix}{^#([^#]+)#.*\$}{\$1}}}{fromdomain}\
                }{\
                        eq {$sender_address_domain}{${sg{$local_part_suffix}{^#[^#]+#(.*)\$}{\$1}}}\
                }\
                }\
        }\
        }\
  }
  data = ${local_part}@${domain}
  local_part_suffix     = #*
  retry_use_local_part

(Angepasster Code von Howto setup a Virtual Mail System with Exim, MySQL, SpamAssassin, ClamAV and Dovecot.)

Allerdings verbietet der Debiansche Exim in der Standardeinstellung das Zeichen # in Adressen für eingehende Mails.
Deshalb muss /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs in folgendem Block geändert werden:

.ifndef CHECK_RCPT_LOCAL_LOCALPARTS
CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : ^.*[@%!/|`&?]
.endif

Rausgeflogen ist # als ungültiges Zeichen in Adressen.

Die Sache hat allerdings auch Haken:
Der fromdomain-Filter ist meiner Meinung nach relativ unnütz, da hier auf den Envelope Sender geprüft wird, d.h. man muss die Absendeadresse der legitimen Mails an einen genau kennen.

Und die von Exim erzeugte Fehlermeldung, die bei normalen Absendern als Bounce ankommt, ist auch nicht allzu aussagekräftig:

TO:<chris#fromdomain#example.com@0x42.org>:
    host mail.exosphere.de [178.63.46.183]: 550 Unrouteable address

Related posts:

  1. Suffixe für lokale Nutzer mit Exim: user-irgendwas@domain
  2. Sieve Mailfilter mit Exim4 + Dovecot auf Debian 5.0 (Lenny)
  3. Sieve-Regeln editieren via Horde Imp
Comments (2) Trackbacks (0)
  1. zwei kommentare:

    1) klar muss man die absender-domain kennen. hier geht’s ja genau darum, dass ich mich bei einer firma registriere und die meine mail nicht weitergeben sollen.

    2) zu der fehlermeldung: der router generiert keine fehlermeldung. entweder er akzeptiert die mail, oder nicht:

    mail from: test@example.com
    250 OK
    rcpt to: pille#fromdomain#0×42.org@struction.de
    550 Unknown user
    rcpt to: pille#fromdomain#example.com@struction.de
    250 Accepted

    wahrscheinlich kommt es von einer fehlgeschlagenen sender-verification.

    pille

    • Zu 1.) Aber ich muss halt auch wissen, welche Domain die Firma im Envelope benutzt.
      Beispiel: Ich bestelle bei amazon.de, die Mails kommen aber trotzdem von amazon.com.

      Zu 2.) Ich krieg eben 550 Unroutable address raus, das sieht für den Absender dann IMO so aus, als wäre mein Mailsystem kaputt. Das ist halt ein (kleiner) Schönheitsfehler, der in meiner Config auftaucht.


Leave a comment

No trackbacks yet.