Addon:E-Mail Provider Liste
Aus VMS1 Tutorial
Dieses Addon fügt dem VMS Adminforce eine neue Seite hinzu, auf der alle E-Mail Provider der angemeldeten User aufgelistet werden.
Inhaltsverzeichnis |
Schritt 1: Neue Seite/Datei anlegen
Im Verzeichnis /adminforce/content/usersystem/ eine leere PHP Datei anlegen mit dem Namen: email_provider.php
In diese Datei zuerst das Grundgerüst einer VMS Seite setzen:
<|><?php|> head("Verteilung der E-Mail Anbieter"); foot(); <|>?>|>
Schritt 2: Informationen aus der Datenbank auslesen
Eine E-Mail Adresse entspricht dem Schema (rfc5322):
local-part @ domain-part
Beispielsweise: name@example.com
Für die Auflistung der E-Mail Provider interessiert nur der Teil nach dem @-Zeichen.
MySQL bietet Funktionen für die Verarbeitung von Zeichenketten an, um aus einem längeren Text einen Teil zu extrahieren, bietet sich:
SUBSTRING( text, position )
an. Diese Funktion schneidet alle Zeichen in text vor der Stelle position ab. Um die Position des @-Zeichens herauszufinden, kann man die Funktion:
LOCATE( zeichen, text )
benutzen. Zusammengesetzt:
SUBSTRING(emailadresse,LOCATE("@",emailadresse)+1) AS m
Das +1 hinter LOCATE dient dazu, dass auch das @-Zeichen weggeschnitten wird.
Da die Gesamtanzahl je solch extrahierter Domain interessiert, werden die Einträge gruppiert, der gesamte Query sieht dann wie folgt aus:
SELECT SUBSTRING(emailadresse,LOCATE("@",emailadresse)+1) AS m, COUNT(*) AS anz FROM vms_emaildaten GROUP BY m
Schritt 3: Ausgabe formatieren
Die Informationen sollen in eine HTML Tabelle eingebettet werden, die 2 Spalten hat:
<table> <tr> <td>Anbieter</td><td>Anzahl User</td> </tr>
Die Spalten sollen, zur besseren Lesbarkeit, abwechselnd eine andere Formatierung haben und die Gesamtanzahl der Einträge soll aufsummiert werden. Die Betreiber, die von mehr als 9 Usern genutzt werden, sollen hervorgehoben angezeigt werden:
<|><?php|> $sum=0; $i=0; $sql = db_query('SELECT SUBSTRING(emailadresse,LOCATE("@",emailadresse)+1) AS m, COUNT(*) AS anz FROM vms_emaildaten GROUP BY m'); <|>while|>($row = <|>mysql_fetch_array|>($sql)){ <|>?>|> <tr <|>class|>="tr_row<?=($i++%2);?>"> <td><a href="http://<?=$row['m'];?>" target="_blank"><?=(($row['anz']>9)?'<b>'.$row['m'].'</b>':$row['m']);?></a></td> <td align="right"><a href="?content=/usersystem/email_provider&provider=<?=$row['m'];?>"><?=$row['anz'];?></a></td> </tr> <|><?php|> $sum += $row['anz']; } <|>?>|>
Abschließend folgen noch die Fußzeilen der Tabelle:
<tr> <td colspan="2"><hr></td> </tr> <tr> <td><?=$i;?></td><td><?=$sum;?></td> </tr> </table>
Schritt 4: Auflistung aller User mit bestimmtem Provider
Wenn man als Seitenbetreiber feststellt, dass Newsletter an bestimmte E-Mail Adressen generell nicht ankommen oder im Spamordner landen, ist es eventuell hilfreich, alle User mit diesem E-Mail Provider auflisten zu lassen. Dazu haben wir im vorherigen Schritt schon einen Link auf die Anzahl der User gesetzt, mit dem GET-Parameter provider=
Den Code dazu fügt man vor dem bisherigen Code ein:
<|><?php|> <|>if|>(<|>isset|>($_GET['provider']) && $_GET['provider']!=''){ head("User mit Anbieter: ".$_GET['provider']); $sql = db_query('SELECT uid,emailadresse FROM vms_emaildaten WHERE emailadresse LIKE "%%'.<|>addslashes|>($_GET['provider']).'%%" '); <|>?>|> <a href="?content=/usersystem/email_provider">zurück</a><br><br> <table> <tr> <td>User</td><td>Adresse</td> </tr> <|><?php|> <|>while|>($row=<|>mysql_fetch_array|>($sql)){ <|>?>|> <tr> <td><?=$row['uid'];?></td><td align="right"><?=$row['emailadresse'];?></td> </tr> <|><?php|> } <|>?>|> </table> <|><?php|> foot(); }<|>else|>{
} <|>?>|>
nicht vergessen!
Ein Beispiel kann man unter ?content=/usersystem/email_provider sehen.
Schritt 5: Link setzen
Damit diese Liste im Adminforce zur Vrfügung steht, muss diese abschließend noch verlinkt werden, bspw. im rechten oder linken Menü (/adminforce/lib/menue_xxxxx.php):
<li><a href="?content=/usersystem/email_provider">E-Mail Anbieter</a></li>
Komplette Datei
<|><?php|> <|>if|>(<|>isset|>($_GET['provider']) && $_GET['provider']!=''){ head("User mit Anbieter: ".$_GET['provider']); $sql = db_query('SELECT uid,emailadresse FROM vms_emaildaten WHERE emailadresse LIKE "%%'.<|>addslashes|>($_GET['provider']).'%%" '); <|>?>|> <a href="?content=/usersystem/email_provider">zurück</a><br><br> <table> <tr> <td>User</td><td>Adresse</td> </tr> <|><?php|> <|>while|>($row=<|>mysql_fetch_array|>($sql)){ <|>?>|> <tr> <td><?=$row['uid'];?></td><td align="right"><?=$row['emailadresse'];?></td> </tr> <|><?php|> } <|>?>|> </table> <|><?php|> foot(); }<|>else|>{ head("Verteilung der E-Mail Anbieter"); <|>?>|> <table> <tr> <td>Anbieter</td><td>Anzahl User</td> </tr> <|><?php|> $sum=0; $i=0; $sql = db_query('SELECT SUBSTRING(emailadresse,LOCATE("@",emailadresse)+1) AS m, COUNT(*) AS anz FROM vms_emaildaten GROUP BY m'); <|>while|>($row = <|>mysql_fetch_array|>($sql)){ <|>?>|> <tr <|>class|>="tr_row<?=($i++%2);?>"> <td><a href="http://<?=$row['m'];?>" target="_blank"><?=(($row['anz']>9)?'<b>'.$row['m'].'</b>':$row['m']);?></a></td> <td align="right"><a href="?content=/usersystem/email_provider&provider=<?=$row['m'];?>"><?=$row['anz'];?></a></td> </tr> <|><?php|> $sum += $row['anz']; } <|>?>|> <tr> <td colspan="2"><hr></td> </tr> <tr> <td><?=$i;?></td><td><?=$sum;?></td> </tr> </table> <|><?php|> foot(); } <|>?>|>