[{"@context":"https:\/\/schema.org\/","@type":"Article","@id":"https:\/\/blog.konstanten.net\/blog\/2025\/01\/31\/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb\/#Article","mainEntityOfPage":"https:\/\/blog.konstanten.net\/blog\/2025\/01\/31\/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb\/","headline":"Wie funktioniert das Tracken\/-ing einer Email (HTML, PHP, MySQL\/MariaDB)","name":"Wie funktioniert das Tracken\/-ing einer Email (HTML, PHP, MySQL\/MariaDB)","description":"f\u00fcr die meisten Unternehmen ist es interessant ob der User die Email(Newsletter usw.) gelesen(ge\u00f6ffnet) hat oder nicht.Die verbreiteste Variante ist das mitsenden einer Grafik(Logo zum Beispiel), hier wird der Name(unique ID automatisch generiert ) oder die ben\u00f6tigte unique ID als Variable mit angehangen. Wichtig hierbei ist das die Grafik vom Server geladen wird und nicht [&hellip;]","datePublished":"2025-01-31","dateModified":"2025-08-20","author":{"@type":"Person","@id":"https:\/\/blog.konstanten.net\/blog\/author\/andre\/#Person","name":"andr\u00e9","url":"https:\/\/blog.konstanten.net\/blog\/author\/andre\/","identifier":1,"image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/02b89515a8983413a92fa86f8d30ef244e0fdd4c0909091e0b93501c492c9a56?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/02b89515a8983413a92fa86f8d30ef244e0fdd4c0909091e0b93501c492c9a56?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Person","name":"andr\u00e9 dietze, konstanten.net"},"image":{"@type":"ImageObject","@id":"https:\/\/blog.konstanten.net\/wp-content\/uploads\/2025\/01\/DSC06650-Kopie-2-e1746281541917.jpg","url":"https:\/\/blog.konstanten.net\/wp-content\/uploads\/2025\/01\/DSC06650-Kopie-2-e1746281541917.jpg","height":885,"width":1665},"url":"https:\/\/blog.konstanten.net\/blog\/2025\/01\/31\/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb\/","about":["Email"],"wordCount":742,"keywords":["Email Marketing","Email Tracking","mod_rewrite","MySQL\/MariaDB","PHP","Statistik","User-Verhalten"],"articleBody":"f\u00fcr die meisten Unternehmen ist es interessant ob der User die Email(Newsletter usw.) gelesen(ge\u00f6ffnet) hat oder nicht.Die verbreiteste Variante ist das mitsenden einer Grafik(Logo zum Beispiel), hier wird der Name(unique ID automatisch generiert ) oder die ben\u00f6tigte unique ID als Variable mit angehangen. Wichtig hierbei ist das die Grafik vom Server geladen wird und nicht als Anhang in der Email.Im Quelltext der Email sieht das so aus:https:&#47;&#47;www.meineDomain.de\/image\/1245e7r987.jpgoder angehangen an einer Grafik als $_GET[&#8218;variable&#8216;]:https:&#47;&#47;www.meineDomain.de\/image\/meinLogo.jpg?uniqueID=1245e7r987F\u00fcr das Tracken ben\u00f6tigt man eindeuige ID, die in jeder automatisch versendeten Email generiert wird. Diese ID wird\/muss abgespeichert werden um eine Zuordnung\/Auswertung zu gew\u00e4hrleisten. In den meisten F\u00e4llen wird diese ID in einer Datenbank-Tabelle abgespeichert, eine Excel-Tabelle oder eine Textdatei reichen aber zum speichern auch aus.Was passiert nach dem versenden der Email:Wenn der User die Email \u00f6ffnet wird die Grafik vom Server geladen, beim laden vom Server wird ein Script ausgef\u00fchrt welche die ID abspeichert.Ab diesem Punkt hat man alle Informationen um ein Script f\u00fcr die Ausgabe der Auswertung fertig zustellen.Wie kann man das Tracken einer Email als User verhindern?Ganz einfach: In den man die Email nur als simple Textdatei(Plain Text) \u00f6ffnet. In diesem Fall werden keine externe Dateien geladen und eine Auswertungist nicht m\u00f6glich. Die meisten Freemail-Anbieter unterst\u00fctzen die Anzeige aber m\u00f6glicherweise nicht bzw. in jedem Email-Programm(wie z.Bsp.: Thunderbird oder Microsoft Outlook) findet man diese Einstellung unter Ansicht.Ben\u00f6tigte Dateien\/Funktionen zum Email tracken:Email-Template \/ Email-Nachricht&lt;php&gt;$uniqueID=rand();&lt;\/php&gt;&lt;!DOCTYPE html&gt;&lt;html lang=\"de\"&gt;&lt;head&gt;&lt;meta charset=\"UTF-8\"&gt;&lt;title&gt;Meine News&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;&lt;!-- Grafik mit uniqueID --&gt;&lt;center&gt;&lt;img src=\"https:\/\/www.meineDomain.de\/image\/meinLogo.jpg?uniqueID=&lt;?=$uniqueID?&gt;\" alt=\"\" border=\"0\"&gt;&lt;\/center&gt;&lt;!-- \/Ende Grafik mit uniqueID --&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Sehr geehrte Damen und Herren.........&lt;\/body&gt;&lt;\/html&gt;Funktion die ausgef\u00fchrt wird wenn die Email versandt wurde:&lt;php&gt;# absenden der Email, im Beispiel mit mail();mail($userEmail,$subject,$mailText,$emailHeader);#Insert Werte(Email-Adresse vom Empf\u00e4nger und #uniqueID) in die Datenbanktabelle$em=new emailTracking;$em-&gt;sendEmailAnduniqueID($userEmail,$uniqueID)&lt;\/php&gt;PHP-Datei die die Grafik &#8222;meinLogo.jpg&#8220; erstellt damit eine PHP-Funktion beim aufruf ausgef\u00fchrt wird (die Grafik ansich kann ja keine Funktion\/Befehle ausf\u00fchren):&lt;php&gt;ini_set('display_errors', 1);ob_start();# Eintrag in die DB, wenn die Email aufgerufen wird vom User$em=new emailTracking;if(isset($_GET&#91;'uniqueID']) &amp;&amp; is_numeric($_GET&#91;'uniqueID'])){$em-&gt;insertUniqueID();    }# Grafik wird erstellt$loadIMG='meinLogo.jpg';if(isset($_GET&#91;'uniqueID'])){$string=strip_tags($_GET&#91;'uniqueID']);$loadIMG='meinLogo.jpg?uniqueID='.$string;}# Ausgabe der Grafik@header('Content-Type: image\/jpeg');$showIMG =$em-&gt;showEmailImage($loadIMG);imagejpeg($showIMG);imagedestroy($showIMG);ob_end_flush();&lt;\/php&gt;Die Klasse &#8222;emailTracking&#8220;:&lt;php&gt;#class emailTracking#author konstanten.netclass emailTracking{function showEmailImage($loadIMG){$img = @imagecreatefromjpeg($loadIMG);return $img;}function insertUniqueID(){$uid=$this-&gt;checkGetValue(($_GET&#91;'uniqueID']));if(isset($uid) &amp;&amp; is_numeric($uid)){$query=\"SELECT * FROM `email_send` WHERE uid='\".$uid.\"';$res=SQL($query);$countRes=mysqli_num_rows($res);if($countRes==1){$arr=mysqli_fetch_assoc($res);$query=\"SELECT * FROM `email_tracking` WHERE uid='\".$uid.\"' AND `userEmail`='\".$arr&#91;'userEmail'].\"';$resTB2=SQL($query);$countRes=mysqli_num_rows($resTB2);if($countRes==0){$insertSQL=\"INSERT INTO `email_tracking` (`uid`,`userEmail`,`time`) VALUES ('\".$uid.\"','\".$arr&#91;'userEmail'].\"','\".time().\"')\"; SQL($insertSQL);$deleteSQL=\"DELETE FROM `email_send` WHERE uid='\".$uid.\"'\";SQL($deleteSQL);}}}}function sendEmailAnduniqueID($userEmail,$uniqueID){$query=\"SELECT * FROM `email_send` WHERE uid='\".$uniqueID.\"' AND `userEmail`='\".$userEmail.\"'\";$res=SQL($query);$countRes=mysqli_num_rows($res);if($countRes==0){$insertSQL=\"INSERT INTO `email_send`(`uid`, `userEmail`,`time`) VALUES ('\".$uid.\"','\". $userEmail.\"','\".time().\"')\"; SQL($insertSQL);}}function checkGetValue($val){if(isset($val) &amp;&amp; is_numeric($val)){$val=$val;}else{$val=0;}return $val;}}Und zum Schluss noch die .htaccess f\u00fcr das &#8222;umschreiben&#8220; der Grafik-Datei mit dem Modul mod_rewrite:RewriteEngine onRewriteRule ^meinLogo.jpg$ meinLogo.php?%{QUERY_STRING} &#91;L]31. Januar 2025"},{"@context":"https:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/blog.konstanten.net\/blog\/#breadcrumbitem"},{"@type":"ListItem","position":2,"name":"2025","item":"https:\/\/blog.konstanten.net\/blog\/\/2025\/#breadcrumbitem"},{"@type":"ListItem","position":3,"name":"01","item":"https:\/\/blog.konstanten.net\/blog\/\/2025\/\/01\/#breadcrumbitem"},{"@type":"ListItem","position":4,"name":"31","item":"https:\/\/blog.konstanten.net\/blog\/\/2025\/\/01\/\/31\/#breadcrumbitem"},{"@type":"ListItem","position":5,"name":"Wie funktioniert das Tracken\/-ing einer Email (HTML, PHP, MySQL\/MariaDB)","item":"https:\/\/blog.konstanten.net\/blog\/2025\/01\/31\/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb\/#breadcrumbitem"}]}]