<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mod_rewrite</title>
	<atom:link href="https://blog.konstanten.net/blog/tag/mod_rewrite/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.konstanten.net</link>
	<description></description>
	<lastBuildDate>Tue, 19 Aug 2025 23:12:49 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Wie funktioniert das Tracken/-ing einer Email (HTML, PHP, MySQL/MariaDB)</title>
		<link>https://blog.konstanten.net/blog/2025/01/31/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb/</link>
					<comments>https://blog.konstanten.net/blog/2025/01/31/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb/#respond</comments>
		
		<dc:creator><![CDATA[andré]]></dc:creator>
		<pubDate>Fri, 31 Jan 2025 00:03:56 +0000</pubDate>
				<category><![CDATA[Email]]></category>
		<category><![CDATA[Email Marketing]]></category>
		<category><![CDATA[Email Tracking]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[MySQL/MariaDB]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Statistik]]></category>
		<category><![CDATA[User-Verhalten]]></category>
		<guid isPermaLink="false">https://mediengestaltung-webdesign-webentwicklung.de/?p=311</guid>

					<description><![CDATA[für die meisten Unternehmen ist es interessant ob der User die Email(Newsletter usw.) gelesen(geöffnet) 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ötigte unique ID als Variable mit angehangen. Wichtig hierbei ist das die Grafik vom Server geladen wird und nicht [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>für die meisten Unternehmen ist es interessant ob der User die Email(Newsletter usw.) gelesen(geöffnet) hat oder nicht.<br>Die verbreiteste Variante ist das mitsenden einer Grafik(Logo zum Beispiel), hier wird der Name(unique ID automatisch generiert ) oder die benötigte unique ID als Variable mit angehangen. Wichtig hierbei ist das die Grafik vom Server geladen wird und nicht als Anhang in der Email.</p>



<p>Im Quelltext der Email sieht das so aus:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;www.meineDomain.de/image/1245e7r987.jpg</code></pre>



<p>oder angehangen an einer Grafik als $_GET[&#8218;variable&#8216;]:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;www.meineDomain.de/image/meinLogo.jpg?uniqueID=1245e7r987</code></pre>



<p>Für das Tracken benötigt man eindeuige ID, die in jeder automatisch versendeten Email generiert wird. Diese ID wird/muss abgespeichert werden um eine Zuordnung/Auswertung zu gewährleisten. In den meisten Fällen wird diese ID in einer Datenbank-Tabelle abgespeichert, eine Excel-Tabelle oder eine Textdatei reichen aber zum speichern auch aus.</p>



<p><strong>Was passiert nach dem versenden der Email:</strong><br>Wenn der User die Email öffnet wird die Grafik vom Server geladen, beim laden vom Server wird ein Script ausgeführt welche die ID abspeichert.</p>



<p>Ab diesem Punkt hat man alle Informationen um ein Script für die Ausgabe der Auswertung fertig zustellen.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Wie kann man das Tracken einer Email als User verhindern?</h3>



<p>Ganz einfach: In den man die Email nur als simple Textdatei(Plain Text) öffnet. In diesem Fall werden keine externe Dateien geladen und eine Auswertung<br>ist nicht möglich. Die meisten Freemail-Anbieter unterstützen die Anzeige aber möglicherweise nicht bzw. in jedem Email-Programm(wie z.Bsp.: Thunderbird oder Microsoft Outlook) findet man diese Einstellung unter Ansicht.</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Benötigte Dateien/Funktionen zum Email tracken:</h3>



<p>Email-Template / Email-Nachricht</p>



<pre class="wp-block-code"><code>&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;</code></pre>



<p>Funktion die ausgeführt wird wenn die Email versandt wurde:</p>



<pre class="wp-block-code"><code>&lt;php&gt;
# absenden der Email, im Beispiel mit mail();
mail($userEmail,$subject,$mailText,$emailHeader);

#Insert Werte(Email-Adresse vom Empfänger und #uniqueID) in die Datenbanktabelle

$em=new emailTracking;
$em-&gt;sendEmailAnduniqueID($userEmail,$uniqueID)
&lt;/php&gt;</code></pre>



<p>PHP-Datei die die Grafik &#8222;meinLogo.jpg&#8220; erstellt damit eine PHP-Funktion beim aufruf ausgeführt wird (die Grafik ansich kann ja keine Funktion/Befehle ausführen):</p>



<pre class="wp-block-code"><code>&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;
</code></pre>



<p>Die Klasse &#8222;emailTracking&#8220;:</p>



<pre class="wp-block-code"><code>&lt;php&gt;
#class emailTracking
#author konstanten.net


class 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 <code>uid='".$uid."' AND `userEmail`='".$arr&#91;'userEmail']."';</code>$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;
}

}
</code></pre>



<p>Und zum Schluss noch die .htaccess für das &#8222;umschreiben&#8220; der Grafik-Datei mit dem Modul mod_rewrite:</p>



<pre class="wp-block-code"><code>RewriteEngine on

RewriteRule ^meinLogo.jpg$ meinLogo.php?%{QUERY_STRING} &#91;L]
</code></pre>


<div class="wp-block-post-date has-small-font-size"><time datetime="2025-01-31T01:03:56+01:00">31. Januar 2025</time></div>]]></content:encoded>
					
					<wfw:commentRss>https://blog.konstanten.net/blog/2025/01/31/wie-funktioniert-das-tracken-ing-einer-email-html-php-mysql-mariadb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
