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(); } ?>
