Exim4 - Spammails in eigene Userordner

  • Thread starter Thread starter Tobster
  • Start date Start date
T

Tobster

Guest
Hallo zusammen,

ich möchte meine jetzige Konfiguration so anpassen, dass Spammails in einem eigenem Userordner landen.

Die Spamfilterung wird beim Provider durchgeführt und die Mails per fetchmail an meinen Server übergeben. Als Kennzeichen dient die Betreffzeile. Da ich Exim mit mysql benutze kann und möchte ich nicht einfach auf dritte Programme zurückgreifen.
Ich habe mir das ganze so vorgestellt bzw. glaube auch das es der richtige weg ist. Ich möchte in der Datei router/900_exim4-config_local_user anstatt auf courier_delivery auf courier_spam_delivery zurückgreifen. courier_spam_delivery würde dann einfach ein anderes Ordnerfeld zurückgeben. Das heißt dann für mich ich kann in der SQL-Tabelle beim Useranlegen einfach den Spamorder in der Zeile nebentran mit angeben.

Nur mein Problem ist jetzt ich bräuchte hilfe beim Schreiben der Anfrag unter transport.

Kann mir da jemand helfen oder ist jemand der Meinung, dass es einfach der völlig falsche weg ist.


Code:
### router/900_exim4-config_local_user
#################################

# This router matches local user mailboxes. If the router fails, the error
# message is "Unknown user".

local_user:
  debug_print = "R: local_user for $local_part@$domain"
  driver = accept
  condition = ${lookup mysql{SELECT ID FROM users WHERE email='${quote_mysql:$local_part}@${quote_mysql:$domain}'}{$value}fail}
  transport = courier_delivery
  cannot_route_message = Unknown user
 
Code:
transport = ${if eq {'[SPAM]'}{ ${substr{0}{6}{'$h_Subject'}} }{courier_delivery_spam}{courier_delivery}}

Das ist mein bisheriger Versuch das ganze zulösen. Allerdings sag mir exim dann ich bräuchte 3 Parameter für substr. Sind aber doch drei. Sehe ich den Wald vor lauter Bäumen nicht oder gibt es eine viel einfachere Methode das ganze mit regex_match zu machen?
 
Ich hab was ähnliches, allerdings mit Maildir anstatt SQL:
Code:
### transport/30_exim4-config_maildir_home
#################################

# Use this instead of mail_spool if you want to to deliver to Maildir in
# home-directory - change the definition of LOCAL_DELIVERY
#
maildir_home:
  debug_print = "T: maildir_home for $local_part@$domain"
  driver = appendfile
  .ifdef MAILDIR_HOME_MAILDIR_LOCATION
  directory = MAILDIR_HOME_MAILDIR_LOCATION
  .else
[B]directory = ${if match {$header_Subject } {SPAM} {$home/Maildir/.Junk} {$home/Maildir}}[/B]
#directory = $home/Maildir
  .endif
  .ifdef MAILDIR_HOME_CREATE_DIRECTORY
  create_directory
  .endif
  .ifdef MAILDIR_HOME_CREATE_FILE
  create_file = MAILDIR_HOME_CREATE_FILE
  .endif
  delivery_date_add
  envelope_to_add
  return_path_add
  maildir_format
  .ifdef MAILDIR_HOME_DIRECTORY_MODE
  directory_mode = MAILDIR_HOME_DIRECTORY_MODE
  .else
  directory_mode = 0700
  .endif
  .ifdef MAILDIR_HOME_MODE
  mode = MAILDIR_HOME_MODE
  .else
  mode = 0600
  .endif
  mode_fail_narrower = false
  # This transport always chdirs to $home before trying to deliver. If
  # $home is not accessible, this chdir fails and prevents delivery.
  # If you are in a setup where home directories might not be
  # accessible, uncomment the current_directory line below.
  # current_directory = /
 
Hat wunderbar geklappt.

Bei mir ist es auch MailDir, nur das ich keine Benutzer im System verwende sondern nur den Speicherort und uid und gid aus der SQL-Tabelle einlese. Ist für mich bei mehr als 200 Benutzern viel weniger Aufwand beim verwalten. Und Courier kann auch direkt noch daraus lesen.
 
Back
Top