Skip to content

E-Mail-Versand


Übersicht

Während der verschiedenen Geschäftsprozessen verschickt vhs.Connect Konnektor diverse E-Mails:

  • Bestätigungs-E-Mail an Teilnehmer

  • Mandatsanforderung an Kontoinhaber

  • Anmelde-Protokoll an vhs

  • Benutzerprofile bestätigen

  • Passwort vergessen

Der Aufbau dieser E-Mails wird über Template-Dateien vorgegeben, die sich um Unterordner „MailTemplates“ des vhs.Connect Konnektor-Programmverzeichnisses befinden:


Abbildung: Mail-Template-Ordner im Programmverzeichnis

Die Vorlagendateien für die verschiedenen E-Mails sind in einzelnen „.tmpl“-Dateien enthalten, wobei die vom Programmstandard verwendetes Templates - ähnlich wie bei den SQL-Templates - mit der zusätzlichen Endung „.original“ abgelegt werden, s. auch Kapitel Anpassung der Kursübertragung.

Die Template-Dateien können mit einem beliebigen Texteditor, z.B. Notepad++, geöffnet und bearbeitet werden:


Abbildung: Mail-Template für Bestätigungsemail in Texteditor

Die Mail-Template-Dateien enthalten ein XML-Dokument, dessen Inhalt über

  1. die Template-Engine NVelocity sowie
  2. ein Variablen-System, mehr hierzu s. Kapitel Kursexport / Anpassung der Kursübertragung

dynamisch generiert werden kann.

Aufbau Template-Datei

Das XML-Dokument mit der Wurzel „EmailTemplate“ enthält folgende Elemente:

  • From: E-Mail-Adresse von Absender, z.B. anmeldung\@vhs-demohausen.de

  • ReplyTo: Antwort-Adresse, z.B. info\@vhs-demohausen.de

  • To: Empfänger-Adresse, i.d.R. Datenbindung auf Adresse des Teilnehmer über \$!Model.MailTo

  • Cc: In Kopie an

  • Bcc: Versteckte Kopie an

  • Subject: Betreff-Zeile, z.B. „vhs Demohausen: Ihre Kursbuchung“

  • Body: Inhalt der E-Mail. Es kann einfacherText oder HTML verwendet werden.
    Im Falle von HTML muss Element „IsHtml“ auf „true“ gesetzt werden.
    Der Body sollte unter Verwendung von NVelocity gestaltet werden, um die Teilnehmer- und Kursdaten dynamisch ausgegeben zu können.

  • AttachmentsTemplates: Liste mit Datei-Anhängen

  • Filename: Wie soll der Dateiname aussehen, falls die E-Mail im Dateisystem gespeichert werden soll? Verwendung von NVelocity-Ausdrücken möglich.

  • IsHtml: Kennzeichen, ob E-Mail-Body in HTML vorliegt.

  • BodyTemplate: Rahmen für Body
    Bei HTML-E-Mails können beispielweise Rahmen und Dokumenten-Header in eine zusätzliche Variable ausgelagert werden. In diesem Feld kann der Name einer Variablen eingetragen werden, die diese grundliegenden Formatierungen enthält.

Variablen

Analog zu den SQL-Variablen können in den E-Mail-Templates mehrfache genutzte Textpassagen als Variable ausgelagert werden:


Abbildung: Variable für Absenderkennung für Verwendung in E-Mail-Templates

Die Variablen müssen nach der vorgegebenen Namenskonvention „VAR_\<Name>“ gespeichert werden. Anschließend kann aus anderen Templates über „\@\@\<Name>“ auf den Inhalt der Variable zugegriffen werden.


Abbildung: Verwendung der Variablen „VAR_SENDER“ zum Einfügen einer Signaturzeile in ein E-Mail-Template

Templating mit NVelocity

NVelocity ist eine Template-Engine, die zur dynamischen Generierung von Webseiten oder anderen HTML-Inhalten verwendet werden kann. Vhs.Connect Konnektor nutzt die Engine zur Generierung der E-Mail-Nachrichten. Ähnlich wie in einem Word-Serienbrief werden die NVelocity-Variablen mit den Daten der Internetanmeldung ersetzt. NVelocity ermöglicht zusätzlich die Nutzung von C#-Code, wodurch verschiedene bedingte Formatierungen eingebaut werden können, mehr hierzu siehe: wikipedia.org/wiki/C-Sharp

Datenbindung

Der Inhalt eines vhs.Connect Konnektor-Feldes kann wie folgt in einer Vorlage eingebunden werden:

$!Model.Order.UserAccountPerson.Salutation

Alle Objekte aus dem Datenkontext können mit dem Ausdruck „\$!Model.\<Objekt>.\<Feld>“ angesprochen werden. In diesem Bespiel wird das Feld „Ansprache“ (=Salutation) des Benutzerprofils(=UserAccountPerson) einer Internetanmeldung (=Order) ausgegeben.

Formatierung

Innerhalb der NVelocity-Ausdrücke kann auf die Standartfunktionalität der .Net-Sprache C# zurückgegriffen werden, z.B. auf die Substring-Funktion. Dadurch kann u.a. auf einfache Weg eine gezielte Datumsformatierung realisiert werden:

<td>\$!reg.Course.StartDate.ToLocalTime().ToString("dddd, dd.MM.yyyy, HH:mm")
Uhr</td>*

Im obigen Ausdruck wird zuerst die Methode DateTime.ToLocalTime() aufgerufen, um die in UTC-gespeicherte Beginn-Uhrzeit eines Kurses in die lokale Zeitzone umzuwandeln. Anschließend wird die Ausgabe über die Funktion DateTime.ToString() im Format „Wochentag, Datum, Uhrzeit“ ausgegeben.

If-Abfrage

An vielen Stellen kann es erforderlich sein, abzufragen, ob ein Feld gefüllt ist, um alternativ einen Fallbackwert einzutragen:

#if ($Model.Order.UserAccountPerson.Salutation)
    <p>$!Model.Order.UserAccountPerson.Salutation,</p>
#else
    <p>Sehr geehrter Teilnehmer,</p>* 
\#end

In dem obigen Ausdruck wird über das „#if“-Konstrukt abgefragt, ob das Feld „Ansprache“ (=Salutation) gefüllt ist. Falls nicht, wird der feste Text „Sehr geehrter Teilnehmer“ ausgegeben.

Foreach-Schleife

Eine Auflistung (z.B. von Kursen, Kursterminen oder Kommunikationsdatensätzen) kann mit dem „#foreach“-Konstrukt ausgegeben werden:

#foreach (\$reg in \$Model.Order.OrderDetails) 
    <div>…</div>  
#end

In dem genannten Ausdruck werden alle einzelnen Positionen (=Kurse, Gutschein) einer Bestellung in Form eines DIV-Elements aufgelistet.

Beispiel: Protokoll-Meldung anpassen

Mit folgendem Code-Schnippsel kann die Ausgabe der benutzer-spezifischen Meldungen in der Mail-Variable VAR_ORDERDETAILS_LIST angepasst werden:

#if($od.HasUserProtocols)
    #foreach ($s in $od.UserProtocols)
        #if($s.routingKey == 'warn.booking.validation.changed.registrationlevel')
            <b>$!s.Header:</b> Anmelde-Status für $!reg.Course.CourseNumber wurde geändert!<br>
        #else
            <b>$!s.Header:</b> $!s.Description<br>
        #end
    #end
#end

Der obige Abschnitt ermöglicht, dass im Falle einer automatisch herabgestuften Anmeldung (z.B. aufgrund einer TN-Sperre) ein individueller Text anstatt der Standard-Meldung ausgegeben wird.

Liste der Mail-Templates

In der folgenden Tabelle werden alle von vhs.Connect Konnektor verwendeten Mail-Templates sowie die als Datenkontext zu Verfügung stehenden Objekte aufgelistet.

Name Datenkontext Beschreibung
booking_confirmation MailTo, Order, Institution Buchungsbestätigung für Teilnehmer
booking_log MailTo, Order, Institution Buchungsprotokoll für vhs
booking_mandate MailTo, Order, Institution Mandatsanforderung für Kontoinhaber
booking_protocol MailTo, Order, Institution Buchungsprotokoll für Dateiarchiv.
Achtung: Kein Mailversand
coupon_confirmation MailTo, Order, OrderDetail, Attendant, Institution Auslieferung von Gutschein-Code
reservation_request MailTo, Order, Institution Bestätigung Kursanfrage für TN in Befürwortungsmodus
reservation_request_vhs MailTo, Order, Institution Anfrage zur Kursbefürwortung an vhs
reservation_request_log MailTo, Order, Institution Protokoll Kursanfrage in Befürwortungsmodus
reservation_confirmation MailTo, Order, Institution Bestätigung nach Befürwortung durch vhs für TN in Befürwortungsmodus
reservation_confirmation_vhs MailTo, Order, Institution Bestätigung nach Befürwortung
reservation_confirmation_log MailTo, Order, Institution Protokoll nach Befürwortung durch vhs in Befürwortungsmodus
reset_password MailTo, UserAccount, Institution, Link, UserAccountPerson Passwort zurücksetzen
verify_mail MailTo, UserAccount, Institution, Link, UserAccountPerson E-Mail bestätigen

Tabelle: Liste aller Mail-Templates

Datenbindung

In den Mail-Templates kann mit \$Model auf die in Tabelle 5 aufgelisteten Objekte im MailContext-zugegriffen werden. Im Folgende eine explizite Auflistung aller Objekte und Felder, die im den Mail-Vorlagen verwendet werden können.

MailTo

Das Feld „MailTo“ enthält die E-Mail-Adresse des Empfängers und kann über „\$Model.MailTo“ eingebunden werden und Adresse der E-Mail. Das Feld wird je nach Kontext automatisch mit dem passenden Empfänger aufgefüllt.

In folgenden Situation wird die E-Mail-Adresse des Teilnehmers in das Feld „MailTo“ eingetragen:

  • Buchungsbestätigung (booking_confirmation), falls die Einstellung NotificationOptions.ConfirmationMailRecipient = User (Standard)

  • Gutschein ausliefern (coupon_confirmation)

  • Benutzerkonto:

    • Verifizieren (verify_mail)

    • Passwort zurücksetzen (reset_password)

  • Befürwortungsmodus:

    • Anfrage (reservation_request)

    • Bestätigung (reservation_confirmation)

In folgenden Situation wird die E-Mail-Adresse des Kontoinhabers (Abbuchung) bzw. Rechnungsempfängers (Überweisung) verwendet:

  • Mandatsversand (booking_mandate)

  • Buchungsbestätigung (booking_confirmation), falls die Einstellung NotificationOptions.ConfirmationMailRecipient = Debtor

In den übrigen Situationen wird die E-Mail an alle in der Liste der Notification-Recipients aufgeführten Empfänger adressiert:

  • Buchungsprotokoll (booking_log)

  • Befürwortungs-Modus:

    • Anfrage (reservation_request_log)

    • Bestätigung (reservation_confirmation_log)

Institution

Das Institution-Objekt ist mit den im Kursverwaltungsprogramm hinterlegten Informationen zur Volkshochschule aufgefüllt. Es wird hauptsächlich in den Standart-E-Mail-Templates verwendet.

Das Institution-Objekt enthält folgende Felder:

Feld Typ Beschreibung
Kind string Art, z.B. “Volkshochschule”
KindShort string Art (kurz), z.B. „vhs“
Name string Name 1
Name2 string Name 2
Street string Straße
StreetNumber string Hausnummer
PostalCode string PLZ
City string Ort
State string Bundesland
Country string Land
Phone string Telefon
Fax string Fax
Mail string E-Mail
Homepage string URL Homepage
BankAccounts List\<BankAccount> Liste der Bankkonten (vom Typ BankAccount)

Tabelle: Auflistung der Veranstalter-Felder für E-Mail- Datenkontext

Order

Das Order-Objekt enthält alle bei der Anmeldung verwendeten Daten inkl. mehrerer Hilfseigenschaften, die z.B. den Zugriff auf die Teilnehmer- oder Kontoinhaberdaten vereinfachen.

Feld Typ Beschreibung
AllProtocols List\<OrderProtocol> Liste aller Arbeitsschritte
BankAccount BankAccount Liste des bei der Bestellungen genutzten Bankkontos
BankAccountHolderPerson Person Personen-Objekt des Kontoinhabers
BillingRecipientPerson Person Personen-Objekt des Rechnungsempfängers, Fallback auf Hauptbenutzer
BillToAddressId String Id des Rechnungsempfängers
BookingErrors List\<ResponseError> Liste der bei der Buchung aufgetretenen Fehler
BookingStatus BookingStatus Status der Buchung Completed / Failed
ConfirmationBy String Id des Teilnehmers, der eine Befürwortung durchführen soll.
ConfirmReservationPerson Person Personen-Objekt des Teilnehmers, der eine Befürwortung durchführen soll.
Culture string Sprach-Einstellung, Standard: „de-DE“
Debtor Person Personen-Objekt des Debitors: Bei Abbuchung Kontoinhaber, bei Überweisung Hauptteilnehmer
Guest Boolean Wurde Anmeldung als Gastanmeldung durchgeführt?
HasCoupon Boolean Enthält die Bestellung einen Gutschein-Kauf?
HasCourse Boolean Enthält die Bestellung min. einen Kurs?
HasFees Boolean Liegen für die Bestellung Gebühren vor?
HasNormalRegistration Boolean Enthält die Bestellung min. eine erfolgreiche Anmeldung?
HasOnlyRegularRegistrations Boolean Enthält die Bestellung ausschließlich erfolgreiche Anmeldungen?
HasProspectiveBuyerList Boolean Enthält die Bestellung eine Anmeldung auf Interessentenliste?
HasReservation Boolean Enthält die Bestellung eine Anmeldung im Befürwortungsmodus?
HasWaitingList Boolean Enthält die Bestellung eine Anmeldung auf Warteliste?
Id string Id der Buchung in ITEM_ORDERS-Tabelle
MandateCreated string Mandatsreferenz für neu angelegtes Mandat
MandateRequested string Mandatsreferenz für neu angefordertes Mandat
Note string Notiz des Teilnehmers
OneWay Boolean Anmeldung im Oneway-Modus, d.h. ohne Rückmeldung an Homepage
OrderDate DateTime Datum der Buchung
OrderDetails List\<OrderDetail> Liste der gebuchten Positionen, siehe unten
OrderId GUID OrderId
PaymentDetails PaymentDetails Zahlungsinformationen
PaymentMethodChanged Boolean Hat sich Zahlform bei OneWay-Anmeldung geändert?
Protocols List\<OrderProtocol> Liste aller Arbeitsschritte
RedeemedCoupons List\<Coupon> Liste der eingelösten Gutscheine
Rollback Boolean Testanmeldung mit Datenbankrollback?
Tan String TAN
TotalBookedQty int Anzahl aller tatsächlich gebuchten Plätze; Warteliste wird hier nicht mitgezählt.
TotalFees decimal Gesamtgebühren
TotalRequiredQty int Anzahl aller angeforderten Plätze
UserAccount UserAccount UserAccount-Objekt, mit allen Informationen zu dem Benutzerprofil
UserAccountId string ID des Hauptbenutzers (Kufer: Teilnehmer.NR, LISSY: ADRESSEN_ID)
UserAccountPerson Person Personenbezogene Infos zu Hauptbenutzer
ValidationErrors List\<ResponseError> Liste aller Validierungsfehler
ValidationStatus ValidationStatus Status der Validierung: valid / invalid
WS_Version String Version von Webservice, die Bestellung verarbeitet hat

Tabelle: Auflistung der Order-Felder in E-Mail-Datenkontext

Beispiel: Zugriff auf Vornamen des Hauptbenutzers

\$Model.UserAccountPerson.FirstName

OrderDetail

Das OrderDetail-Objekt enthält alle Informationen für eine einzelne Position aus dem Warenkorb.

Feld Typ Beschreibung
AllProtocols IEnumerable\<OrderProtocol> Alle Protokoll-Meldungen für Kurs
Attendants List\<Attendant> Liste aller Kursteilnehmer-Objekte
BookingErrors List\<ResponseError> Liste aller Buchungsfehler
BookingStatus BookingStatus Buchungsstatus: „Completed“ / „Failed“
CouponNote String Notiz bei Gutscheinerwerb
CouponValue Decimal Gutschein-Wert
Course CourseDetails Kurs-Details
CourseId String Kurs-Nr (Kufer) bzw. Kurs_id (LISSY)
CourseSummary CourseSummary Vereinfachtes Kurs-Objekt
Fees BasicFee Übersicht über Kursgebühren
HasUserProtocols bool Enthält Protokoll-Datensätze für Teilnehmer
Id String ID in ITEM_ORDERDETAILS-Tabelle
InternalOrderId String ID von zugehörigen Datensatz in ITEM_ORDERS-Tabelle
Lecturer Person Personen-Datensatz des Dozenten
Note String Kursbezogene Notiz des Teilnehmers
Protocols IEnumerable\<OrderProtocol> Protokoll-Meldungen für Verwaltung
RegistrationLevelChanged Boolean Unterscheidet sich der tatsächliche Anmeldestatus vom bestellten (nur bei OneWay-Anmeldungen)?
RegistrationMode RegistrationMode Anmelde-Modus (Normal, Befürwortungsmodus)
TotalQty Int Anzahl der bestellten Plätze
Type OrderDetailType Art (Kurs, Gutschein)
UserProtocols IEnumerable\<OrderProtocol> Protkoll-Meldungen für Teilnehmer
ValidationErrors List\<ResponseError> Liste aller Validierungsfehler
ValidationStatus ValidationStatus Validierungsstatus
Venue Kursort Informationen Kursort

Tabelle: Auflistung der OrderDetails-Felder im E-Mail-Datenkontext

Auf das OrderDetails-Objekte wird in der Regel innerhalb einer Schleife zugegriffen:

#foreach(var \$detail in \$Model.Order.OrderDetails)
{
\$detail.Course.Title
\$detail.Course.SubTitle

}

In dem obigen Beispiel werden beispielweise in einer foreach-Schleife Titel und Untertitel aller Kurse der Bestellung untereinander ausgegeben.

Attendant

Das Attendant-Objekt stellt die Anmeldung einer einzelnen Person zu einem Kurs dar. Es ist in Listenform im OrderDetails-Objekt enthalten.

Feld Typ Beschreibung
Coupons List\<Coupon> Liste der erworbenen Gutscheine
ExternalId String Externe ID, z.B. aus ContentServ
Fees AggregatedFee Gebühren-Objekt
Id String Id des Personen-Objekts
InternalId String Id’s der zugehörigen Anmeldungs bzw. Belegungs-Datensätze
InvoiceNumber String Rechnungsnummer, Kassenzeichen
LocalizedRegistrationLevel String Lokalisierte Version des Anmeldestatus
MandateId String Bei der Verbuchung genutzte SEPA-Mandatsreferenz
Person Person Personen-Objekt des Teilnehmers
QtyOthers Int Anzahl der zusätzlichen Teilnehmer bei anonymer Mehrfachbuchung
Quantity Int Anzahl der gebuchten Plätze
RegistrationLevel RegistrationLevel Anmelde-Status

Tabelle: Auflistung der Attendant-Felder zur Verwendung in E-Mail-Datenkontext

Abhängige Objekte

Person

Das Person-Objekt enthält alle personenbezogenen Informationen, wie z.B. Anschrift, Kontaktdaten.

Feld Typ Beschreibung
Barred Boolean Gesperrt (Ja/Nein)
BarredDueTo String Grund für Sperre
CareOf String „Care of“-Adresszusatz
City String Ort
ContactInformation List\<ContactEntry> Liste mit Kontaktdaten
Country String Land
Culture String Spracheinstellung, z.B. „de-DE“
DateOfBirth DateTime Geburtsdatum
DefaultDiscountDetail DiscountDetails Ermäßigungsgruppe
FirstName String Vorname
Gender String Geschlecht (M/W)
Id String ID in Datenbank
Language String Sprache
LastName String Nachname
Nationality String Staatsangehörigkeit
PostalCode String PLZ
Salutation String Ansprache (z.B. Sehr geehrter Herr Mustermann)
State String Bundesland
Street String Straße
StreetNumber String Hausnummer
Title String Titel, z.B. Dr. med.

Tabelle: Auflistung der Person-Felder zur Verwendung in E-Mail-Datenkontext

ContactEntry

Das Objekt ContactEntry stellt eine Kontaktmöglichkeit, z.B. E-Mail-Adresse oder Telefonnummer, dar.

Feld Typ Beschreibung
Id string Id von Kontaktdatensatz in Kursverwaltung
Label String Beschriftung für Kontaktdatensatz, z.B. „E-Mail“, „Telefon dienstlich“
PromotionalUse Boolean Darf der Kontakt-Datensatz für Werbezwecke, z.B. Newsletter, verwendet werden?
SortIndex Int Sortierung
Type ContactEntryType Art, z.B. „phone“, „email“
Value String Wert

Tabelle: Auflistung der ContactEntry-Felder zur Verwendung in E-Mail-Datenkontext

BankAccount

Das BankAccount-Objekt stellt einen Bankdatensatz im Kursverwaltungsprogramm dar.

Feld Typ Beschreibung
AccountHolderId String ID des Kontoinhabers
AccountNumber String Kontonummer
BankCode String BLZ
BankName String Name Bankinstitut
Bic String BIC
Iban String IBAN
Id String ID des Bankdatensatzes in Kursverwaltungsprogramm
IsDifferentAccountHolder Boolean Liegt abw. Kontoinhaber vor?
MandateDtOfSgntr DateTime Austellungsdatum SEPA-Lastschriftmandat
MandateExpirationAt DateTime Ablaufdatum SEPA-Lastschriftmandat
MandateId String Mandatsreferenz SEPA-Lastschriftmandat
MandateInternalId String ID von Mandatsdatensatz in Kursverwaltungsprogramm
MandateType String Art von SEPA-Lastschriftmandat (Wiederkehrend, Einmalig)
SortIndex Int Sortierung

Tabelle: Auflistung der BankAccount-Felder zur Verwendung in E-Mail-Datenkontext

BasicFee

Das Fee-Objekt stelle die Gebühren für eine Position des Warenkorbs dar:

Feld Typ Beschreibung
AmountPaid Decimal Bereits gezahlte Gebühr
Quantity Int Anzahl
Reduction Decimal Ermäßigung
RegularFee Decimal Einzelne Gebühr
RegularFeeTotal Decimal Gesamtbetrag ohne Ermäßigung
TotalFee Decimal Gesamtbetrag nach Ermäßigung

Tabelle: Auflistung der BasicFee-Felder zur Verwendung in E-Mail-Datenkontext

UserAccount

Das UserAccount-Objekt repräsentiert alle Daten eines Teilnehmers während einer Internetanmeldung.

Feld Typ Beschreibung
UserName string Benutzername (=E-Mail)
PersonList List\<Person> Liste aller Personen-Objekte
BankAccounts List\<BankAccount> Liste aller Bankkonten
BillingRecipients List\<BillingRecipient> Liste der Standard-Rechnungsempfänger
LinkedPersons List\< LinkedPerson> Liste der Subteilnehmer

Tabelle: Auflistung der UserAccount-Felder zur Verwendung in E-Mail-Datenkontext

In der Regel wird aus den Mail-Templates nicht direkt auf das UserAccount-Objekt zugegriffen, sondern über die Hilfseigenschaften des Order-Objektes, z.B. Order.UserAccountPerson oder Order.BankAccount.

Datei-Anhänge


Vhs.Connect Konnektor kann an die erstellten E-Mails feste oder dynamische generierte Dateien anhängen:

  • Feste Anhänge:
    Fertige PDF-Dateien mit AGBs, Mandatsanforderung usw.

  • Dynamisch generierte PDFs:
    Anmeldekarten, Rechnungen, Mandatsanforderungen, usw.


Abbildung: Bestätigungs-E-Mail mit dynamisch generiertem PDF-Anhang

Das folgende Kapitel beschreibt, welche Einstellungen in den Mail-Template-Dateien vorgenommen werden müssen, um die oben beschriebene Funktionalität zu erreichen.

Aufbau XML

Die Anhangs-Funktionalität wird innerhalb der MailTemplate-Datei im Unterpunkt \<AttachementTemplates> definiert. Das \<AttachementTemplates>-Element enthält eine Liste von \<AttachementTemplate>-Elementen, die je einen einzelnen Anhang repräsentieren.


Abbildung: Anhangsfunktionalität von Mail-Versand im Element \<AttachementTemplate> steuern

Im Element \<AttachementTemplate> können folgende Eigenschaften festgelegt werden:

Feld Beschreibung
Type Typ: Fester Anhang („file“) oder dynamisches PDF („html2pdf“)
Path Pfad zu Datei oder Vorlagendatei für PDF-Generierung
FileNameTemplate Template für Dateiname mit Datenbindung
Scope Umfang von Datenkontext:
Ignore Soll Anhang unter gewissen Umständen nicht verwendet werden?
PdfManipulations Liste von nachträglichen PDF-Manipulationen, z.B. für Hintergründe, Drehungen, usw.
PageWidth Breite des dynamisch generierten PDFs
PageHeight Höhe des dynamisch generierten PDFs
CopyTo Verzeichnis zum Speichern von dynamisch generierten PDFs
  • summary: MailTo, Order, Institution
    Anhang wird einmal pro Bestellung generiert, z.B. Gesamtrechnung.

  • orderdetail: MailTo, Order, OrderDetail, Institution
    Für jede Position(=OrderDetail) der Bestellung wird ein Anhang angehängt bzw. generiert.

  • attendant: MailTo, Order, OrderDetail, Attendant, Institution
    Pro Teilnehmer und Kurs wird ein Anhang erstellt, z.B. Anmeldekarte.

Feste Datei-Anhänge

Feste Datei-Anhänge können mit der folgenden Konfiguration erstellt werden:

\<AttachmentTemplate>

\<Type>file\</Type>

\<Path>MailTemplates\de-DE \*.pdf\</Path>

\</AttachmentTemplate>

Die obige Konfiguration hängt alle PDF-Dateien im Mail-Template-Ordner automatisch an die E-Mail an. Es müssen lediglich der Typ auf „file“ gestellt und im Element \<Path> ein relativer Pfad zu den anzuhängenden Dokumenten angegeben werden, der auch Wildcards (hier: *) enthalten kann, mehr hierzu s. wikipedia.org/wiki/Wildcard_(Informatik)

Hinweis: Im Dateinamen können Variablen, z.B. für die Kursnummer, eingebaut werden. Auf diese Weise können für unterschiedliche Kurse unterschiedliche PDF-Dokumente an die Bestätigungsmail angehängt werden.

PDF-Anhänge erstellen

Neben den festen PDF-Anhängen kann vhs.Connect Konnektor dynamisch PDF-Dateien generieren und an die verschiedenen E-Mails anhängen.


Abbildung: Anmeldekarte an Bestätigungs-E-Mail anhängen

In der obigen Abbildung wird eine Anmeldekarte gezeigt, die für jeden Kurs und Teilnehmer erstellt und an die Bestätigungs-E-Mail angehängt wird.

Die PDF-Erstellung setzt sich aus folgenden Komponenten und Prozessen zusammen:

  • HTML-Vorlagen-Datei:
    Der Aufbau der PDF (Maße, Datenbindung, etc.) wird in einer HTML-Datei angegeben.

  • Datenbindung:
    NVelocity füllt Vorlagen-Datei mit Daten der Internetanmeldung aus.

  • PDF-Erstellung
    HTML-Datei wird als PDF gespeichert.

  • PDF – Nachbearbeitung:
    PDF-Datei wird ggf. mit Hintergrund oder zusätzlichen Seiten versehen

Um eine PDF an eine E-Mail anzuhängen, muss wie bei den festen Dateianhängen ein „AttachmentTemplate“-Element in das XML-Dokument des Mail-Template eingefügt werden:


Abbildung: Dynamischen PDF-Anhang für Mail-Versand generieren

Im Feld Type muss der Wert „html2pdf“ eingetragen werden. Der Eintrag im Feld Path steuert dann, wo die zu verwendende Vorlagendatei liegt. Die Seite kann in einem beliebigen HTML-Editor bearbeitet werden.


Abbildung: HTLM-Vorlagendatei für PDF-Anhang

Das Feld „Scope“ gibt an, wie oft das PDF generiert werden muss. In diesem Fall signalisiert der Eintrag „attendant“, dass das PDF für jede Kurs und jeden Teilnehmer erstellt werden muss.

Der Eintrag im Feld „Ignore“ steuert, ob das PDF in bestimmten Fällen nicht ausgegeben werden soll. In diesem Fall werden für Anmeldungen zu Kursen mit bestimmten Kennzeichen keine Anmeldekarten erstellt.

Anschließend können im Unterelement „PdfManipulations“ verschiedene PDF-Nachbearbeitungsschritte definiert werden. In diesem Beispiel wird ein Briefbogen („background.pdf“) auf allen Seiten in den Hintergrund gelegt.

Highlight Kurse

Kurse können in der Buchungsbestätigung und den Bulkmailings beworben werden. Hierzu sind folgende Einstellungen möglich/nötig:

Einstellungen:

Damit die Highlight-Kurse bei der Mailerstellung geladen werden, muss das Interface HasHighlightCourses auf dem MailContext vorhanden sein und in den MailTemplateHints einer oder mehrere der folgenden Optionen aktiviert werden:

Option Beschreibung
All:ShowHighlightCourses Alle Templates
Bulk:ShowHighlightCourses Alle Templates die mit bulk beginnen
booking_confirmation.tmpl:ShowHighlightCourses Nur das Template booking_confirmation.tmpl

Sql-Templates

Es gibt bei den Sql-Templates unter Mailing 2 Templates die konfiguriert werden können.

  • HighlightCourses: Wenn keine UserId vorhanden ist, dann wird dieses Template verwendet, um die Highlight-Kurse zu laden
  • HighlightCoursesUser: Wenn eine UserId vorhanden ist (bei BulkMails wird dieses aus UserId mit Fallback auf PersonId geladen)

Beispiel Sql-Template für KuferSql-MSSQL:

select top 3
    k.nr as CourseId
from 
    kurse k
    left outer join WEB_KURSHIGHLIGHTS wh on k.NR= wh.knr
@where
    and k.nr in (@CourseId)
    and not exists (SELECT 1 FROM BELEGUNG b WHERE b.KNR = k.NR and b.TNR = @UserId) /* TN hat noch keine Anmeldung in Kurs*/
    and isnull(k.TEIL_AKT,0)<k.TEIL_MAX /* Es gibt noch freie Plätze */
    and wh.knr is not null /* Highlight gesetzt (Web-> Highlight-Kurs -> Kurs anzeigen*/
    and (nullif(wh.von, '30.12.1899') is null or wh.von <= getdate()) /* von nicht gesetzt oder in vergangenheit*/
    and (nullif(wh.bis, '30.12.1899') is null or wh.bis >= getdate()) /* bis nicht gesetzt oder in zukunft*/
    and dateadd(d, -7, k.BEGINN_DAT) > getdate() /*Kurse dessen Beginndatum mindestens eine Woche in der Zukunft liegt*/
order by newid()

Mail-Variablen

Zur Einfachen Einbindung können die 2 Mail-Variablen VAR_HIGHLIGHT_COURSES und VAR_HIGHLIGHT_COURSES_ZURB genutzt werden.

Beispieleinbindung in booking_confirmation.tmpl:

...
#if($Helper.IsEmptyList($Model.HighlightCourses) == false)
@@VAR_HIGHLIGHT_COURSES
#end
...