[Modul] SymconMailer

Ab IP-Symcon 7.0 kann die SMTP Instanz auch HTML E-Mails versenden!


Alter Beitrag:


Mit SMTP_SendMail kann man wunderbar aus IP-Symcon heraus Emails verschicken. Das ganze hat zur Zeit nur eine kleinen Nachteil, es wird nur Plain Text verschickt.

Wer jetzt unbedingt HTML Emails verschicken will kann zu Alternativen greifen wie die PHPMailer. An sich lassen sich damit alle Bedürfnisse abdecken. Da aber vielleicht der ein oder andere ja ein Formular gewöhnt ist wie von SMTP_SendMail auch, ist dies einfach nur ein Wrapper für PHPMailer der für IP-Symcon eine Instanz mit Konfigurationsformular zur Verfügung stellt.

Dokumentation

1. Funktionsumfang
Das Modul nutzt PHPMailer (LGPL-2.1) und stellt ein Konfigurationsformular in IP-Symcon zur Verfügung um aus IP-Symcon einfach HTML Emails versenden zu können.

2. Voraussetzungen

[ul]
[li]IP-Symcon 4.3[/li][/ul]

3. Installation
a. Laden des Moduls
Die IP-Symcon (min Ver. 4.3) Konsole öffnen. Im Objektbaum unter Kerninstanzen die Instanz Modules durch einen doppelten Mausklick öffnen.

In der Modules Instanz rechts oben auf den Button Hinzufügen drücken.

In dem sich öffnenden Fenster folgende URL hinzufügen:


https://github.com/Wolbolar/IPSymconMailer

und mit OK bestätigen.

b. Einrichtung in IPS
In IP-Symcon im Objektbaum eine neue Instanz mit CTRL+1 hinzufügen als Hersteller PHPMailer auswählen.

Funktionen:

PHPMailer_SendHTML_EMail(int $InstanceID)
Sendet eine HTML Email mit der in der Instanz hinterlegten Werten

Beispiel:


PHPMailer_SendHTML_EMail(12345 /*[Geräte\PHPMailer\PHPMailer]*/);

PHPMailer_SendHTML_EMailEx(int $InstanceID, string $name_recipient, string $adress_recipient, string $subject, string $body, string $altbody)
Sendet eine HTML Email

Beispiel:


PHPMailer_SendHTML_EMailEx(12345 /*[Geräte\PHPMailer\PHPMailer]*/, "Max Musterl", "max.muster@email.de", "Hallo", "This is the HTML message body <b>in bold!</b>", "This is the body in plain text for non-HTML mail clients");

Konfiguration:

Das Formular der Instanz ist auszufüllen, in der Liste sind so viele Empfänger hinzuzufügen wie die Email bekommen sollen.

Es sind zwei Skripte im Objektbaum zu erstellen CTRL+3 und in das Skript ist der Inhalt zu schreiben der verschickt werden soll. Hier ist darauf zu achten das in dem Skript die <? und ?> weggelassen werden.

Beispiel:

HTML Body Skript:


This is the HTML message body <b>in bold!</b>

Alt Body:


This is the body in plain text for non-HTML mail clients

wird von einem Email Empfänger ohne HTML Funktion angezeigt.

Hi Fonzo,

wollte schnell mal dein Modul auf meinem Test Systm testen (IPS5).
Wenn ich eine Test Mail senden möchte, kommt eine Fehlermeldung.

mail.PNG

Gruß

EDIT: Könnte am Docker liegen.

Habe das Modul auf meinem Haupt IPS Installiert.
Alles Eingetragen. Kommt aber auch eine Meldung.

mail2.PNG

Komisch, ich habe das gerade mal einem raspberry getestet da kommt keine Fehlermeldung auf einem Windows Server aber schon. Ich schau mir das später noch mal an.
Im Zweifelsfall übergib halt die Parameter dann sollte es eigentlich gehen, ist aber nicht Ziel eventuell muss man dann halt zwei Methoden nehmen falls das so IP-Symcon nicht schluckt.

Ich warte mal auf Nall-chan der das Modul kritisch auseinander nehmen wird ;). Vielleicht findet er oder jemand anderer ja auch gleich den Fehler.

Ich habe mal ein Update hochgeladen.

Gibt jetzt zwei Methoden siehe oben. Probiere einfach mal aus ob es jetzt geht.

Danke,

mit deinem Beispiel geht es. Nun muss ich nur noch die HTML Seite aufbauen und die entsprechenden Werte einfügen.

Danke für das Modul … ich finde es klasse!

Eine Frage. Ich möchte gerne Daten aus Symcon in die HTML Datei bekommen (z.B. Tür auf usw). Kann man den Inhalt in der HTML irgendwie „dynamisch“ gestalten?

Hi!

Was du in deinen Body der E-Mail schreibet bleibt völlig dir überlassen. Das kann statischer Inhalt sein - oder, wie wohl in 99% aller Fälle, dynamischer Inhalt :slight_smile:

Du baust dir einfach ein Skript, dieses wird zyklisch oder durch einen Auslöser aufgerufen, liest Variablen aus oder macht sonst was und generiert HTML-Code. Dieses HTML ist der Body und wird über die Funktion des Moduls als HTML-Mail verschickt - fertig :slight_smile:

Vmtl. hast du nur einen Denkfehler bzw. ein Verständnisproblem gehabt - bin mir sicher, dass du das hinbekommst :slight_smile:

Viele Grüße,
Chris

Hi Bayro,

danke … das geht genau in die Richtung … ich „wollte“ halt das schreiben der HTML Datei auf dem Dateisystem „sparen“. Macht aber total Sinn.

Hast du evtl. einen hinweis wie ich ein lokale Datei „überschreibe“ mit aktuellen Daten. Ich muss die ja im Ordner mit den Scripten erzeugen und bin nicht sicher wie das geht oder on man das so überhaupt kann?

Viele Grüße

Enno

Ich hab nichts von einer HTML-Datei geschrieben :smiley:

$body = „<html><body>Inhalt der Variable ist „.GetValue(12345).“</body></html>“

So in der Art meinte ich das in deinem Skript :slight_smile: Nur korrekt geschrieben mit den „ oben usw :slight_smile:

-Chris-

Danke … ich schaue mal

Gibt einige IPS-Skripte hier im Forum die HTML Code dynamisch zusammenbauen und diesen dann an eine Funktion übergeben oder in eine Variable schreiben. Einfach nur auf deine Wünsche anpassen :slight_smile:

-Chris-

Ich habe auf 5.1 geupdatet und nun werden keine HTML EMails mehr versendet.
Beim SENDEN Button kommt die Meldung:
Abort Processing during Fatal-Error: filter_var(): explicit use of FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIRED is deprecated
Error in Script /mnt/data/symcon/modules/.store/fonzo.ipsymconmailer/libs/Fonzo/PHPMailer/PHPMailer.pgp on Line 3599.
Damit kann ich leider nichts anfangen.
Wie bekomme ich das wieder gefixt?

Scheint wohl mit der PHP Version zusammen zuhängen, muss ich mal anschauen um das zu beheben.

Danke für die Info.
Symcon hatte nach dem Update „gemeckert“, dass es neue Versionen gibt. Diese habe ich dann hoffentlich korrekt installiert. Ob die alten Module noch Probleme machen, weiß ich leider nicht.

Kann ich das Modul irgendwo in der Konsole finden, welches angemeckert wird?
Ich bin mit den Modulen noch nicht so firm, wo die liegen.

Ich habe nun ein wenig recherchiert und probiert. In Zeile 3599 bei PHPMailer.php habe ich folgendes geändert. Damit scheint es nun zu gehen.

Statt


        if (filter_var('http://' . $host, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) {

nun


        if (filter_var('http://' . $host, FILTER_VALIDATE_URL)) {		

Wenn das so OK ist, könnte es ja im Module Store geändert werden.

Ich habe PHPMailer auf Version 6.0.7 aktualisiert, damit sollte der Fehler auch weg sein. Im Beta Branch ist das sofort verfügbar, der Stable Branch folgt dann nach Freigabe.

Nach diesem einem Modul Update ist der Symcon Dienst neu zu starten.

Danke.
Ich habe die Beta installiert. Diese läuft nun.

Hi Fonzo,

Wenn ich als Anhang einen Pfad eines JPG-Bildes angebe, wird das Bild 2 mal angehängt.
Entferne ich den „attachement name“, wird richtig nur ein Bild angehängt.
Kannst Du das in Deinem Modul bitte noch korrigieren?

Dank und Gruss!

Tom

Hallo,
nutze aktuell den PHPMailer_SendHTML_EMailEx. Ist eine perfekte Lösung.

Der HTML String mit einem png-Bild wird korrekt in einer HTML Box angezeigt.
Dies wird wie folgt realisiert:

(Ausschnitt mit dem Bild)
$ausgabe = ’ <h2>’ . „Entwickler“. ‚</h2>
<table border=„8“ bgcolor=#FFFFFF>
<tr>
<td width=„292“ align=„left“><img src=„user/datawarehouse.png“ alt=„Aktion up“ width=„96“ height=„96“>
<tr>‘;
$html .= $ausgabe;
Das png Bild liegt im Ordner c:IP-Symcon/webfront/user

Wenn ich nun den html-String mit PHPMailer_SendHTML_EMailEx versende, erscheint das png-Bild nicht im Mailprogramm (Thunderbird) bei der Mail. Habe gelesen, bzw. vage in Erinnerung, man muss dem PHPMail Programm die Dateien nochmals mitteilen. An welcher Stelle muss dies erfolgen?

Danke für Eure Hilfe.
Grüße von
Ekkehard

ich muss gestehen ich habe mich noch nie so genau mit Bildern in HTML Emails auseinander gesetzt. Wenn ich das richtig sehe ist das ja aber letzlich nicht anderes wie eine HTML Seite, die dann das Email Programm darstellt. Die Grafiken sind ja nicht in die HTML Mail eingebettet. sondern es ist ein Link auf die Grafik gesetzt. Das heisst dann wiederum das logischerweise die Grafik die Du in der Mail verlinkst auch für das Email Programm zugäniglich sein muss, wie bei einer Webseite auch. Wenn Du da eine relativen Pfad angibst kann das also nicht funktionieren. Wenn Du also wirklich willst das IP-Symcon auch die Grafiken zur Verfügung stellt, dann müstest Du einen absoluten Pfad angeben unter dem IP-Symcon auch erreichbar ist, also entweder so was wie eine eigene Domain oder IP-Symcon Connect.

Also in der Form


https://<IP-Symon HOSTNAME>/user/datawarehouse.png

bei IP-Symcon Connect also in der Form


https://123456789abcdefghik.ipmagic.de/user/datawarehouse.png