Deutsche Zope User Group
Gast 2 Benutzer online
DZUG-News

Wie geht dtml-sendmail mit CMF und ZPT ?

Wie setzt man im CMF die aus einem Formular �bergebenen Daten per Mail ab? Eine �bersetzung von dtml-sendmail nach CMF mit ZPT.

Das Absetzen einer EMail mit den aus einem Formular �bergebenen Werten aus CMF heraus bereitet mit ZPT einiges Kopfzerbrechen. Einen in ZPT �quivalenten Befehl zu dtml-sendmail gibt es leider (noch) nicht. Folgendes kleines HOTWO zeigt, wie es trotzdem geht.

Alternativ kann auch KampaSend von Michael Fischer v. Mollard verwendet werden. KampaSend ist ein mailhost �hnliches Produkt, welches ein mit ZPT/Python Skripten einfacher anzuwendendes Interface anbietet.

Auch auf den Artikel ZPT + Mailhost + Zope 2.6.0 von pkop sollte man mal einen Blick werfen. Er schlie�t an diesen Artikel an.

  1. HTML-Formular

    Zun�chst ist ein ganz normales HTML-Formular im CMF zu erzeugen:

      
    Vorname
    Nachname
    EMail

  2. Python-Script

    Die Daten aus dem HTML-Formular werden an das Python Script "mail_anmeldung" �bergeben. Das Python-Script mu� �ber das ZOPE Managment Interface (ZMI) angelegt werden.:

      # mail_anmeldung
      #
      from Products.PythonScripts.standard import html_quote
      request = container.REQUEST
      RESPONSE =  request.RESPONSE
    
      request.set("error", 0)
      if request.vorname is not '' and request.nachname is not '' and request.email is not '':
        try:
          mail_text = container.mail_anmeldung_template (container, request)
          host = container.MailHost
          host.send( mail_text )
        except:
          request.set("error", 1)
      else:
        request.set("error", 1)
    
      return container.mail_anmeldung_response( container, request)
    

    Das Python-Scipt pr�ft zun�chst, ob alle Felder in dem Formular ausgef�llt werden. Ist dies der Fall wird, die DTML-Methode "mail_anmeldung_template" mit dem aktuellen REQUEST aufgerufen. Diese liefert den Inhalt der EMail zur�ck. Die EMail wird dann �ber den MailHost verschickt. Voraussetzung ist nat�rlich ein eingerichter MailHost. In den Security Einstellungen im ZMI muss zudem eingestellt werden, da� "Anonymous" den MailHost auch verwenden darf ("Use mailhost services"). Tritt beim Versenden der Mail ein Fehler auf, z.B. weil die angegeben Mail Adresse nicht korrekt war, wird dies mittels "try" abgefangen.

    Zum Schluss ruft das Python-Skript das ZPT "mail_anmeldung_response" auf, das je nach error Status eine Erfolgs- oder Fehlermeldung ausgibt.

  3. DTML-Methode "mail_anmeldung_template"

    Hier legen wir einfach fest, wie unsere EMail sp�ter aussehen soll. Die DTML-Methode ist �ber das ZMI anzulegen:

       From: 
       To: 
       Subject: EMail von  
    
       Datum     : 
    
       Nachname  : 
       Vorname   : 
       E-Mail    : 
    

  4. ZOPE Page Template (ZPT) "mail_anmeldung_response"

    Das ZPT "mail_anmeldung_response" ist �ber das ZMI anzulegen. Wir pr�fen hier den error code und geben entweder eine Erfolgs- oder Fehlermeldung aus:

      
      
          
      
    
      
    
        

    Fehler!

    Vielen Dank!

Anmerkung: der Fehlerabfang im ZPT "mail_anmeldung_response" k�nnte noch dahingehend verfeinert werden, da� man nicht mittels JavaScript auf das Formular zur�ckspringen mu�, sondern dem Nutzer das Formular mit den bereits vorhandenen Werten erneut p�sentiert wird.

�nderungen und freundliche Kritik an: schopen at medienlabor dot de

Geschrieben von mschopen . Letzte �nderung 01.04.2003 22:10.