Tags:
create new tag
, view all tags

Kontakt-Datenbank und E-Mail-Versand

Beteiligte: Swen Vermeul, Davor Kupresak

Ausgangslage

Es existiert eine umfangreiche Kontakt-Datenbank, welche durch die Benutzer aus verschiedenen Organisationseinheiten gepflegt wird. Die Versandzentrale ist für den Postversand zuständig und benutzt eine bestehende Applikation, um Kontakte auszuwählen. Diese Applikation (auf Filemaker basierend) soll dahingehend ausgebaut werden, dass auch die Erzeugung von Mailverteilern möglich wird.

Es soll möglich sein zwei folgende Arten von Verteilern zu erstellen:

- Einmalige Verteiler: das sind Verteiler die einmalig für einen Versand verwendet werden. Diese sollen im Exchange erstellt und nach Ablaufdatum (der definiert wird) samt allen Kontakten gelöscht werden

- Verteiler mit uneingeschränkter Gültigkeit: Solche Verteiler sollen im sympa erstellt werden. Die Verteiler, die aus Kontakt-DB, erstellt werden, werden jede Nacht aktualisiert und die allfällige Änderungen werden an sympa gemeldet. Es ist noch zu definieren wie die Schnittstelle Kontakt-DB <-> sympa implementiert werden soll.

Anforderungskriterien

  1. die Erzeugung von Mailverteiler aus der Kontaktdatenbank heraus soll so einfach wie möglich sein
  2. Absender des Verteilers soll eine unpersönliche Adresse darstellen
  3. der Verteiler soll in Outlook sichtbar sein
  4. nur berechtigte Personen dürfen an diesen Verteiler eine Mail schreiben dürfen
  5. die Kontakte hingegen sind vertraulich und sollen in Outlook nicht sichtbar sein
  6. die Verteiler haben eine beschränkte Gültigkeit und sollten hinterher gelöscht werden
  7. die Kontakte haben eine beschränkte Gültigkeit und sollen hinterher gelöscht werden
  8. die Verteiler sollen in einer vernünftigen Zeitspanne erstellt werden (ca. 1 Stunde?)

Implementierungsdetails

Schnittstellentabellen

In der Kontakt-Datenbank werden Tabellen in der Form von Views zur Verfügung gestellt:

Tabellenname Feldname Beschreibung
ExchangeVerteiler   Auftrags- und Statustabelle für die zu erstellenden Verteiler
ExchangeVerteiler ExchangeVerteilerID Primärschlüssel
ExchangeVerteiler ListeID Primärschlüssel auf Seite Kontakt-DB
ExchangeVerteiler Verteilername gewünschter Name des Verteilers, sollte keine Leerzeichen enthalten
ExchangeVerteiler Gueltig_ab Datum, ab wann der Verteiler frühestens erstellt werden soll
ExchangeVerteiler Gueltig_bis Datum, bis wann der Verteiler existieren soll.
ExchangeVerteiler Status Enthält die Werte pendent, erstellt, fehler. Fehlermeldungen sollten hier oder besser in einem separaten Feld aufgeführt werden
ExchangeVerteiler MutDat Mutationsdatum (Timestamp), wird automatisch ausgefüllt
ExchangeVerteiler MutIDE enthält die Werte KDB_USER, NETHZ und wird automatisch ausgefüllt
Exchangeverteiler_Access   versandberechtigte Personen
Exchangeverteiler_Access ExchangeVerteilerID Referenz auf die Tabelle ExchangeVerteiler
Exchangeverteiler_Access PERSID Schlüssel für die berechtigte Person
Exchangeverteiler_Kontakte   alle Mitglieder dieses Verteilers
Exchangeverteiler_Kontakte ExchangeVerteilerID Referenz auf Tabelle ExchangeVerteiler
Exchangeverteiler_Kontakte PERSID kann null sein, falls es sich um einen externen Kontakt handelt
Exchangeverteiler_Kontakte Famname  
Exchangeverteiler_Kontakte Vorname  
Exchangeverteiler_Kontakte Email E-Mail-Adresse des Kontakts

Life-Cycle eines durch die Kontakt-DB erstellten Verteilers

  • Ein neuer, periodisch laufender cronjob kontakt_db.pl arbeitet die Tabelle ExchangeVerteiler nach pendenten Einträgen ab
  • das Feld GUELTIG_AB ist zu beachten, der Verteiler sollte nicht vor diesem Zeitpunkt erstellt werden, da bis zum Zeitpunkt des Versands noch weitere Mitglieder hinzugefügt werden
  • mit dem Namen des Verteilers wird eine E-Mail-Adresse in der Form Verteilername@ethz.ch gebildet. Falls bereits ein entsprechender sAMAccountName oder E-Mail-Adresse existiert, wird das Statusfeld auf «fehler» gesetzt und eine Statusmeldung geschrieben
  • Wird der Name auf Seite der Kontaktdatenbank korrigiert, muss das Statusfeld wieder auf «pendent» zurückgesetzt werden
  • die für diesen Verteiler berechtigten User (Primary Uname) werden gesucht und im Verteiler eingetragen (Attribut dlMemSubmitPerms)
  • die externen Kontakte (Personen ohne PERSID) werden in einem geschützten Bereich des Active Directory erstellt, wo sie zwar vom Exchange-Server gelesen werden können, nicht aber von allen AD-Usern
    • im Attribut nethzTask wird der Wert delete after GUELTIG_BIS eingetragen (Datum in der Form YYYY-MM-DD)
    • falls der Kontakt an dieser Stelle bereits existiert, wird der zur Zeit grösste Wert (über alle Verteilerlisten) eingetragen
    • falls der Kontakt an einer anderen Stelle bereits existiert, wird nichts gemacht (der Kontakt bleibt für alle sichtbar)
  • die externen Kontakte werden als Mitglied zum Verteiler hinzugefügt
  • interne Kontakte (Personen mit PERSID) werden via primary Uname gesucht und als Mitglied zum Verteiler hinzugefügt
  • das Status-Feld des erstellten Verteilers wird auf den Wert erstellt gesetzt
  • allfällig aufgetretene Fehler werden in ein noch zu definierendes Feld der Tabelle ExchangeVerteiler geschrieben,
  • der bestehende cronjob delete_mail_lists.pl sucht täglich nach Objekten, die gelöscht werden sollen
    • LDAP-Suchstring zur Auffindung dieser Objekte:
    • (&(objectClass=group)(nethzTask=delete after*)(nethzTask<=delete after $datum))
    • wobei mit $datum das gestrige Datum gemeint ist
  • ein neuer cronjob delete_contacts.pl sucht täglich nach Kontakt-Objekten, die gelöscht werden sollen
    • LDAP-Suchstring zur Auffindung dieser Objekte:
    • (&(objectClass=contact)(nethzTask=delete after*)(nethzTask<=delete after $datum))
    • wobei mit $datum das gestrige Datum gemeint ist

aktuelle Implementierungsschwierigkeiten

Senden als

Es gibt mehrere Möglichkeiten, wie man eine Mail im Auftrag von jemand anderem versendet. Eine Liste von Möglichkeiten wird hier beschrieben. Wenn man im AD bei einem Mailbox-User das Attribut publicDelegates mit dem distinguishedName des Berechtigten füllt, kann dieser Berechtigte im Namen dieses Mailbox-Users Mails verschicken. Dazu muss der Berechtigte in Outlook eine neue Nachricht wählen und unter dem Menü Ansicht DONE "Von"-Feld ankreuzen. Dann kann er den User auswählen, in dessen Namen er eine Mail verschicken möchte.

Falls er die Berechtigung nicht hat, wird beim Senden die Fehlermeldung

  • Sie besitzen nicht die Berechtigung, die Nachricht im Auftrag des angegebenen Benutzers zu versenden
angezeigt. Falls es klappt, wird der Empfänger unter Outlook wie folgt angezeigt:

  • Berechtigter Sender im Auftrag von Benutzer XY

In den meisten anderen Mail-Clients wird nur der Benutzer XY als Absender angezeigt, lediglich in den Headerzeilen wird ersichtlich, woher die Mail ursprünglich stammt.

Fehlermeldungen

Es gibt viele Gründe, weshalb die Erstellung eines Verteilers aufgrund eines Fehlers fehlschlägt. Hier eine Liste aller Möglichen Komplikationen:

  • die E-Mail-Adresse für diesen Verteiler existiert bereits
  • die E-Mail-Adresse für einen oder mehreren Kontakt ist syntaktisch falsch / Domäne existiert nicht

Probleme mit dem Verteiler selbst können in das Statusfeld der View EXCHANGEVERTEILER geschrieben werden, falsche E-Mail-Adressen hingegen nicht.

Aufwandschätzung

Task Beschreibung Aufwand Erledigt? In Produktion?
Spezifikationen Projektbeschreibung, Implementierungsdetails, Sitzungen 3d DONE  
Exchange Proof of concept: wie können Contact-Objekte [[Nethz/AD/HiddenContacts][unsichtbar] gemacht werden 3d DONE DONE
Exchange Proof of concept: Prüfen, ob ein Verteiler mit unsichtbaren Contact-Objekten funktioniert 1d DONE DONE
Schnittstellentabellen Zugriff auf Schnittstellentabellen 1d DONE DONE
AD::ContactHidden Implementierung von delete-After, Sichtbarkeit 1d DONE DONE
AD::Maillist::Test Testmodul  3d DONE DONE
AD::ContactHidden::Test Testmodul 1d DONE DONE
PowerShell Skript arbeitet periodisch alle Contact-Objekte in der OU ab, die zu verstecken sind (Mathias Füglistaler) ?d Processing TODO
delete_contacts.pl cronjob zum Löschen nicht mehr verwendeter Kontakte 1h DONE DONE
kontakt_db.pl neuer cronjob, welcher die Schnittstellen-Tabelle ExchangeVerteiler abarbeitet und Verteiler und Kontakte erstellt 2d DONE DONE
adTask Umbennenen des bisherigen (nicht verwendeten) Attributs NUID in adTask 2h DONE DONE
Tests durchführen von funktionalen Tests mit realen Testdaten 1d DONE DONE

Weiterführende Information

-- SwenVermeul - 2013-01-08

Topic revision: r15 - 2013-06-19 - vermeul
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback