Auch hierfür sollen die J!eigenen Mittel verwendet werden, um die Mail zusätzlich mit einer HTML-formatierten Mail zu versenden. Joomla bietet dazu zunächst zwei Möglichkeiten an:

  • Zum einen über die Nutzung von JFactory::getMailer() (ist eine Ableitung von der phpMailer-Class).
  • Einfacher geht es jedoch mit der JUtility::sendMail() (libraries/joomla/utilities/utility.php) (s. http://api.joomla.org/Joomla-Framework/Utilities/JUtility.html), weil hier ein einzeiliger Aufruf genügt, der notw. Rest wird komplett in den JUtitltiy-Funktionen erfüllt. Hier sind zwei Methoden sendAdminMail() und sendMail() dokumentiert. Die Einbindung der JUtility und der Aufruf der Funktion sendMail() sieht prinzipiell so aus:



jimport( 'joomla.utilities.utility' );
JUtility::sendMail($from, $fromname, $recipient, $subject, $body, $mode=0, $cc=null, $bcc=null, $attachment=null, $replyto=null, $replytoname=null);

Hierbei ist $mode = 0, es ist ein Plain-Text und $mode=1, der body ist eine HTML-Datei.

Innerhalb der Funktion JUtility::sendMail() findet quasi die komplette Zuweisung der Eigenschaftsparameter der JFactory::getMailer statt (s. http://docs.joomla.org/JUtility/sendMail) so, dass man sich das step-by-step im eigenen Quellcode ersparen kann.

Der Funktionsaufruf liefert true zurück, wenn das Versenden der Mail erfolgreich war, so wie es in der getMailer auch die Methode send() macht.

Beide Classen haben jedoch einen maßgeblichen Nachteil. Es sind zwar Anlagen als Attachements mgl., aber es ist nicht dokumentiert oder gar unmöglich Inline-Grafiken anzufügen, wie es für eine gestaltete Mail auch gewünscht sein kann. Gleiches trifft zu für das Einfügen eines Alternativen-Textes für die Anzeige als Nicht-HTML-Mail (Altbody). Deshalb wurde schließlich weder die eine noch die andere Variante umgesetzt, sondern eine vollständig eigene, die sich an das Know-How der Mail-Funktion von VirtueMart orientiert.

per me_mail.class.php Class meMail()

Aus diesen Gründen wurde auf eine 3. Variante zurückgegriffen: Basierend auf den Virtuemart-Scripten classes/ps_main.php die ebenfalls Methoden zur Erzeugung von Mails enthält, die aber Inline-Grafiken unterstützt, wurde eine eigenen Klasse meMail() erstellt und ist über die Einbindung des komplett neu erstellten Scriptes components/com_misterestate/gui/templates/me_mail.class.php einbindbar.

Allen drei o.g. Varianten ist eigen, dass diese als unterste Basis die Funktionen der libraries/phpmailer/phpmailer.php und der dazugehörigen smtp.php nutzen. Alternativ ließen sich auch die beiden Scripte class.phpmailer.php und class.smtp.php unter includes/phpmailer/ nutzen, doch diese sind letztendlich nur Aliase der beiden o.g. Mail-Script, weil Sie lediglich und ausschließlich beide o.g. Scripte includieren.

Hinweis:
In der me_mail.class.php sind noch Funktionen zur UTF-8 gerechten Formatierung von Mails enthalten, die aber z.Z. zum Teil deaktiviert wurden, weil sie vermutl. nicht benötigt werden, wenn die Templates sauber in UTF-8 erstellt werden. Sollte es aber Probleme mit z.B. Umlautumsetzungen geben, speziell bei einer Internationalisierung des Projektes, z.B. auch mit den Daten die per Kontakt-Formular in die Templates eingespielt werden, so auch die Betreffzeile, dann müssten diese aktiviert und genutzt werden (s. dazu dann vmMail()).

Die neue me_tmpl.class.php

Erstellt wurde ein Template-Classs-Script components/com_misterestate/gui/templates/me_tmpl.class.php. Auch für dieses Script wurden massgebliche Scriptbestandteile aus den VirtueMart-Template-Class-Scripten übernommen und hier eingefügt – namentlich die components/com_virtuemart/classes/template.class.php.

Dieses sammelt alle Template-Variablen und bietet u.a. eine Methode fetch(), welche z.B. die Templatedatei(n) components/com_misterestate/gui/templates/themis/new_INTquery-mail.tpl.php verarbeitet und eine Variable $htmlbody innerhalb der misterestate.php übergibt. Wichtig dabei sind in der Methode fetch() die PHP-Befehle ob_start()ob_get_contents()ob_end_clead(). Diese sammeln alle Inhalte aus der Templatedatei ohne diese an den Browser auszugeben, so dass diese als Rückgabewerte der Funktion fetch() nach $htmlbody übergeben werden können.

Im Anschluss wird für die 3 mgl. ausgehenden Mails (Owner=Empfänger, Interessent=Absender und Admin) jeweils eine neue Instanz von meMail erzeugt, die sich komplett um das Versenden anhand der übergebenen Parameter kümmert.

Achtung! Beide genannten Mail-Varianten, die Class über meMail() und die per JUtility::sendMail() können nicht gemeinsam ohne weiteres in einem Script verwendet werden. Es kommt zum Konflikt, weil die genutzte phpMailer-Classe nur einmal deklariert werden kann (cannot redeclare class PHPMailer …).

custom_reply

In der Mail-Funktion von ME wird abgefragt der Parameter custom_replay. Der Sollte standardmäßig auf 0 gestellt sein. Eingestellt wird dieser Parameter in der J!-Komponente „Kontakte“ unter Einstellungen. Im modalen Dialog ist es dann der letzte Parameter: Benutzerdefinierte Antwort. Die Erläuterung dazu ist etwas unklar formuliert. Vermutlich sendet das System automatisch eine Rückantwort an die Kontaktperson. Dies ist standardmäßig ausgeschalten. Ist diese ausgeschalten muss also die Komponenten sich selbst um die Rückantwort kümmern!

Abschlussbemerkung

An dieser Stelle würden Sie sicher gerne detailierte Scripte finden wollen. Ich bitte Sie dazu mit mir Kontakt aufzunehmen. Je nach Umfang der Hilfestellung würde der Aufwand berechnet (Stunde ca. 30 Euro)