Aktivierungsemail verschicken und auswerten

in PHP · Autor: Sebastian Fuchs

Bei vielen Registrierungen bekommt man automatisch eine Email zugesendet, in der man einen Link anklicken muss, um die Registrierung zu bestätigen. Da ich ein ähnliches Script in meinem Informatik Grundkurs programmieren sollte, habe ich mich mit diesem Thema einmal beschäftigt.
Heraus kam ein simples Script, das die Grundvoraussetzungen erfüllt und leicht um neue Funktionen erweitert werden kann.
Der Versand der Email kann direkt nach der Registrierung erfolgen. Für das Tutorial wird vorausgesetzt, dass die Benutzerdaten in einer MySQL Datenbank abgespeichert werden und bei einer neuen Registrierung erstmal den Status "inaktiv" o.ä. erhalten.
Damit nach dem Klicken des Links auch der Benutzer identifiziert werden kann, sollten wir uns einen individuelle Wert aus der Datenbank dazu nehmen. Das kann beispielsweise die ID, der Benutzername oder die Email-Adresse sein. Ich werde in diesem Beispiel die Benutzer ID verwenden.
Fangen wir also mit unserem ersten Script an, das zum Versand der Email benötigt wird.
<html>

<head>
  <title>Aktivierungsemail verschicken</title>
</head>

<body>
<?php

# MySQL Zugangsdaten
mysql_connect('localhost', 'Benutzername', 'Passwort');
mysql_select_db('Datenbank');

# zufälligen Sicherheitscode erzeugen
$code = substr(md5(time()),0,10);

# Benutzer speichern
mysql_query('INSERT INTO benutzertabelle (name, email, status, code)
                                  VALUES ("'.$_POST['name'].'", "'.$_POST['email'].'", 0, "'.$code.'")') OR die(mysql_error());

# Variablen zuweisen
$user_id    = mysql_insert_id();           // ID des Benutzers in der Datenbank
$absender   = 'Deine Email/Homepagetitel'; // das, was als Absender bei dem Empfänger erscheinen soll
$empfaenger = $_POST['email'];             // Email-Adresse des Empfängers (von Registrierung)
$betreff    = 'Registrierungsbestätigung'; // Betreff der Email

############ EMAIL BODY ANFANG ############
$header      = "From: ".$absender."\n";

$email_body  = "Bitte klicke auf folgenden Link, um deine Registrierung zu bestätigen.\n\n";
$email_body .= "http://www.deineseite.de/auswertung.php?id=".$user_id."&code=".$code;
############ EMAIL BODY ENDE ############

# Versand der Aktivierungsemail
mail($empfaenger, $betreff, $email_body, $header);

echo 'Vielen Dank für deine Registrierung! Es wurde eine Aktivierungsemail verschickt, um deine Registrierung zu bestätigen.';

?>
</body>

</html>
Zunächst müssen alle Variablen zugewiesen werden und die Verbindung zur Datenbank hergestellt werden (Zugangsdaten entsprechend anpassen). Der Empfänger und die Benutzer ID werden aus der Registrierung (beispielsweise einem Formular) bzw. der anschließenden Datenbankoperation bezogen. Bei Abweichungen müssen die Angaben angepasst werden. In der Benutzertabelle ist zudem eine weitere Spalte für den Sicherheitscode notwendig, damit sichergestellt wird, dass nur der Empfänger der Email das Konto aktivieren kann.
Anschließend muss noch der Absender angegeben werden. Das kann entweder ein Titel (z.B. von deiner Seite) oder auch deine Emailadresse sein. Danach wird ein Betreff festgelegt. Es sollte für den Empfänger jedoch erkennbar sein, dass es sich um eine Registrierungsbestätigung handelt.
Dann wird die Email erstellt. In den Header ($header) wird der Absender, der ja vorhin definiert wurde, eingetragen.
Danach kommt der Textteil der Email ($email_body), in der ein beliebiger Text geschrieben werden kann. Darunter erscheint ein Link, in dem die Adresse der Datei, die zur Auswertung des Links verwendet wird, angegeben werden muss. Mit diesem Link wird die ID und der Sicherheitscode des aktuellen Benutzers übergeben. Dazu aber gleich noch mehr.
Am Schluss wird dann mithilfe der mail()-Funktion die Aktivierungsemail verschickt.
Jetzt ist die Email verschickt und mit einem Link versehen, den wir uns nun für die Aktivierung zu Nutze machen.
Alles was dazu benötigt wird ist ein MySQL Update mit einigen vorgeschalteten Überprüfungen.
<html>

<head>
  <title>Registrierung abschließen</title>
</head>

<body>
<?php

# Überprüfung der Parameter
if(isset($_GET['id']) && isset($_GET['code']) && is_numeric($_GET['id']))
{
  # übergebene Parameter
  $user_id = $_GET['id'];
  $code    = $_GET['code'];

  # MySQL Zugangsdaten
  mysql_connect('localhost', 'Benutzername', 'Passwort');
  mysql_select_db('Datenbank');

  $ueberpruefung = mysql_query('SELECT code FROM benutzertabelle WHERE id='.$user_id) OR die(mysql_error());

  # Benutzer existiert
  if(mysql_num_rows($ueberpruefung) == 1)
  {
    $row = mysql_fetch_assoc($ueberpruefung);

    # Vergleich der Sicherheitscodes
    if($code == $row['code'])
    {
      # Status aktualisieren
      mysql_query('UPDATE benutzertabelle SET status=1 WHERE id='.$user_id) OR die(mysql_error());

      echo 'Vielen Dank! Dein Konto wurde aktiviert und kann jetzt benutzt werden!';
    }
    else
    {
      echo 'Der Aktivierungscode ist nicht korrekt!';
    }
  }
  else
  {
    echo 'Ungültige Benutzer ID!';
  }
}
else
{
  echo 'Bitte den Link aus der Email verwenden!';
}

?>
</body>

</html>
Diese Datei müsste in unserem Beispiel jetzt als "auswertung.php" gespeichert werden (je nachdem, welche Datei bei dem Link angegeben wird).
Nachdem überprüft wurde, ob eine gültige ID und ein Aktivierungscode per URL übergeben wurde, wird die Verbindung zur MySQL Datenbank hergestellt. Hier musst du natürlich wieder die Zugangsdaten zu deiner MySQL Datenbank angeben.
Danach kommt das MySQL Update. Anstatt "benutzertabelle" wird wieder die Tabelle angeben, in der deine Benutzer gespeichert werden.
Dann folgt nach einer Überprüfung des Sicherheitscodes der Befehl, die Spalte status des jeweiligen Benutzers (die bei der Registrierung z.B. auf "inaktiv" bzw. 0 steht), in "aktiv" (bzw. 1) zu aktualisieren.<br />
Mit der WHERE-Angabe wird nur dort der Status verändert, an dem der Benutzername aus der Datenbank gleich der ID, die über den Link übermittelt wurde, ist.
Anschließend erscheint dann noch eine Meldung, dass das Konto aktiviert wurde.
Bei einem Login-Script könnte man nun prüfen, ob der Benutzer, der sich gerade anmelden möchte, schon aktiviert wurde. Wenn nicht, ist ein Login noch nicht möglich.

Ich hoffe ich konnte die Problematik einer Aktivierungsemail mit diesem Tutorial ein wenig näher bringen. Erweiterungen sollten sich in dieses Script ohne Probleme einfügen lassen.

Downloads:



· zurück zu "PHP Tutorials"

Lesezeichen

Diese Seite zu Mister Wong hinzufügen Diese Seite zu del.icio.us hinzufügen Diese Seite bei YiGG hinzufügen Diese Seite bei LinkARENA hinzufügen Diese Seite zu alltagz hinzufügen Diese Seite bei iGoogle hinzufügen