E-Mail aus E-Mail-Vorlage erstellen

Für die Erstellung einer neuen E-Mail auf der Grundlage einer angegebenen E-Mail-Vorlage steht die DOCUframe-Funktion „DBEMailCreateFromTemplate“ zur Verfügung. Allerdings werden dabei die Druck-Makros in der E-Mail-Vorlage nicht ausgeführt.

Das folgende Makro erstellt eine neue E-Mail auf der Grundlage der angegebenen E-Mail-Vorlage und führt dabei alle vorhanden Platzhalter/Druck-Makros aus. Es können sogar Platzhalter in der Betreff-Zeile verwendet werden.

BOOL createEMailFromTemplateName( STRING TmplName, AdresseNr Adr, DBOBJECT &Eml )
  BOOL ok = FALSE; // Makro-Rückgabewert
  STRING EMailBetreff, EMailText, EMailHtml;

  Druckdaten PrintData;
  EMailVorlageAllSet EmlVorlAS;
  EMailVorlageSet EmlVorlS;
  EMailVorlage EmlVorl;

  IF( !StrIsEmpty( TmplName ) ) // nur, wenn ein Template-Name übergeben wurde
    DBASSortByIndex( EmlVorlAS, "_Name" ); // E-Mail-Vorlagen sortieren

    IF( DBASFindKeyStr( EmlVorlAS, TmplName ) ) // E-Mail-Vorlage suchen

      IF( DBASGet( EmlVorlAS, EmlVorl ) )
        DBOCreate( PrintData, "Druckdaten", TRUE ); // temporäre Druckdaten anlegen
        DBPrintDataSetAddress( PrintData, Adr ); // Adresse für Druckdaten setzen

        IF( DBEMailGetText( EmlVorl, EMailText ) )
          DBExecPrintMacros( EMailText, PrintData ); // Druck-Makros für Plain-Text ausführen
        ENDIF

        IF( DBEMailGetHtml( EmlVorl, EMailHtml ) )
          DBExecPrintMacros( EMailHtml, PrintData ); // Druck-Makros für HTML-Text ausführen
        ENDIF

        EMailBetreff = EmlVorl.Betreff; // Betreff aus E-Mail-Vorlage in Variable übernehmen
        DBExecPrintMacros( EMailBetreff, PrintData ); // evtl. Platzhalter in Betreffzeile ausführen
        ok = DBEMailCreate( EmlVorl.Absender, Adr.EMailAdresse, EMailBetreff, EMailText, EMailHtml, "", Eml );

        IF( ok ) // nur, wenn die E-Mail erstellt wurde
          DBDocAssign( Eml, Adr ); // E-Mail der Adresse zuordnen
        ENDIF

      ENDIF // E-Mail-Vorlage aus Liste gezogen

    ENDIF // Email-Vorlage gefunden

  ENDIF // Template-Name übergeben

RETURN( ok )