Hauke Hammerich: E-Mail an Adresse senden bei abschicken des Formulars?

Hallo Forum!

Ich habe einene Newsletter in dem man seine E-Mailaddy einträgt. Um nun zu überprüfen ob es eine replyfähige und korrekte Adresse ist möchte ich gerne das bei der Eintragung eine Mail an die betreffende Adresse senden.
In dieser Mail soll der betreffende User dann auf einen Link klicken um dann die Eintrgung zu bestätigen.
Außerdem habe ich in der DB ein Feld in der Standardmäßig die "0" eingetragen wird.
Nun soll der User in der Mail auf einen Link klicken um den Newsletter zu "aktivieren" und die Eintragung abzuschließen. Hierzu sollte nun der Wert im  Feld akitv auf "1" geändert werden.

Weiß jemadn da eine Hilfe bzw. eine Internetadresse wo so etwas beschireben ist oder kann mir so weiterhelfen?

Hier mal die newsletter.php-->http://hammerhaui.ha.funpic.de/newsletter.txt

Und hier auch mal das Formular:
----------
<form action="index.php?section=newsletter" method="POST">
<center>
<h4 style="color:#ffff00"><b><u>Newslettereintrag:</b></u></h4>
<input type="email" name="email" size="30">
<br>
<br>
<p style="color:#ffff00"><input type="radio" value="eintragen" checked name="r1">&nbsp;<b>Anmelden</b>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<b>Abmelden</b>&nbsp;<input type="radio" name="r1" value="loeschen"></p>
<input type="submit" name="anmelden" value="Absenden">&nbsp;&nbsp;
<input type="reset" name="zuruecksetzen" value="Zurücksetzen">
</form>
------

Gruß
Hauke

P.S.: Bitte den Link kopieren und dann in die Adressleiste eintragen!! Sonst funzt das nicht!

  1. Hallo!

    Vielleicht beschreibt dieses Thema mein Problem besser?

    Gruß
    Hauke

    1. nun du musst einfach den mail() Befehl einfügen. http://www.selfphp.info/funktionsreferenz/mail_funktionen/mail.php

      schau dort mal nach.

      Gruß Markus

  2. Hallo Hauke,

    Wenn ich Dich recht verstehe, soll Dein System so funktionieren:
    1. Ich trage auf Deiner Webseite meine Emailadresse und unterschreibe so fuer den Newsletter
    2. Du checkst, ob die Emailadresse schon existiert, wenn nicht, wird sie eingetragen, aber auf inaktiv gesetzt
    3. Gleichzeitig schickst du eine Mail an mich mit der Bitte um Bestaetigung
    4. Ich klicke in dieser Mail auf einen Link, der meinen Eintrag in deiner DB auf aktiv setzt

    Du hast zwar einen Gutteil davon schon in Deinem Script umgesetzt, aber mit dem Hin- und Hermailen klappt's noch nicht so. Deshalb hier mal die Geschichte in Pseudocode:

    Erst mal die MySQL-Tabelle im Groben

    • ein Feld Id, das kann ein Integer mit Autoincrement sein
    • die Mailadresse, ein Varchar, nicht zu klein waehlen
    • aktiv, zB. ein Enum mit 1,0, default 0
    • das Datum des Eintrags, ich wuerde Integer nehmen und den Unix-Timestamp eintragen

    Dann das Anmeldescript
    if(($_POST['email']) != ('newsletter.email') AND ($_POST['r1']) == ('eintragen'))
    {
         schau in die DB, ob's die Adresse schon gibt (hast Du ja soweit)
         wenn die Adresse existiert -> Fehlermeldung 'Adresse existiert'

    ansonsten               a. -> eintragen, aber inaktiv
                                 b. -> Mail an die neue neue Adresse schicken, schau Dir die Funktion mail() im PHP-Manual an. Wie die Mail ausehen kann steht weiter unten
    }
    else loeschen, aber das hast Du ja schon

    Wie soll die Mail aussehen?
    Frag nach dem Eintrag die ID des Neueintrags von der Tabelle ab. Dann schickst Du mit mail() eine Email an die angegebene Emailadresse. Der Minimalinhalt ist ein Link auf deine Bestaetigungsseite und enthaelt die ID als GET-Parameter.
    Beispiel <a href="link_zu_deiner_seite/bestaetigung.php?id=25">Eintrag bitte bestaetigen</a>

    Die Bestaetigungsseite
    Hier kommt man hin, wenn man auf den Link in der Mail klickt, demnach steht $_GET['id'] zur Verfuegung.
    if(!empty($_GET['id']))
    {
      schau in der Tabelle, ob diese id existiert
      wenn ja, stell aktiv auf 1
      wenn nein, gib eine Fehlermeldung aus
    }

    Das ist das Prinzip, sonderlich ausgefuchst ist das noch nicht, moegliche Verbesserungen waeren zB.

    • An der Stelle, wo Du vor dem Abschicken der Mail die ID aus der DB abfragst, frag gleich die Emailadresse mit ab, mach ein md5() drueber und haeng das Ergebnis an den Bestaetigungslink
      ...bestaetigung.php?id=25"> wird zu bestaetigung.php?id=25&e=md5-wert der Adresse">
      Dann hast du im Bestatigungsscript $_GET['e'] und aenderst die Abfrage auf
      select * from tabelle where id=id and md5(email)="der wert aus $_GET[e]"
      Das gibst dir einen gewissen Schutz vor Missbrauch
    • garbage collection
      Um Eintraege loszuwerden, die nie bestaetigt wurden, machst Du bei jedem Aufruf des Eintragsscripts eine kleine Muellsammlung. Sagen wir, wir geben den Kandidaten 24 Stunden Zeit (= 86400 Sekunden)
      Delete from tabelle where aktiv = 0 and (eintragszeit + 864000) < now()

    Gruß,

    Dieter

    1. Hallo Dieter!

      Danke für Deine sehr ausführliche Antwort!
      Hast mir schon etwas weitergeholfen!!

      Gruß
      Hauke