EMailversand per PHP

Nightstalker123

Grünschnabel
Hi,

ich scripte gerade ein Registrierungssystem und dort würde ich gerne eine Funktion einbauen, das man erst die Registrierung bestätigen muss indem man erst auf einen Link klicken muss welchen man per Mail bekommt.

Leider habe ich absolut keine ahnung von SMTP und so weiter. Deshalb weiß ich auch absolut nicht wie ich das anstellen soll. Wenn mir also jemand helfen kann wie der automatische E-Mailversand per PHP Script funktioniert, würde ich mich sehr freuen.

Gruß Nightstalker123
 
hmm. Ich habs jetzt mal Probiert aber irgendwie kommt da nix an. Vieleicht kann mir mal jemand sagen ob ich das richtig gemacht habe:

Die Form Action
HTML:
<form action="network.php?step=2" method="post">

Die Network.php?step=2
PHP:
$sql = "INSERT INTO user (name,vorname,adresse,ort,plz,country,day,month,year,user,password,email) VALUES ('$name','$vorname','$adresse','$ort','$plz','$country','$day','$month','$year','$user','$password','$email')";
	$nachricht = "Hallo $user,/n
			  Dies ist eine Testemail";
	$nachricht = wordwrap($nachricht, 70);
	mail('jdheldt@hotmail.com', 'Testemail', $nachricht);
	echo('Vielen Dank f&uuml;r ihre Registrierung. Sie k&ouml;nnen sich nun einloggen');

Achtung: Das ist nur ein Auszug der Network.php?step=2. Die komplette Datei findet ihr unter http://nopaste.info/3314c19ac2_nl.html
 
Machs doch so(der Code wird Folgen,find ich net auf meiner Festplatte):
1.Email versenden
2.Empfänger klickt auf link der nach
Code:
register.php?action=activate
führt
3.der klick wird in der eintrag in der Datenbank Namens 'locked' mit dem Wert 'true' wird auf 'false' gesetzt oder gelöscht
4.Der User kann sich einloggen!
Wie gesagt,der Code wird bald folgen,weil ich den erst aus meinen etlichen Ordnern auf der HDD rauskramen muß:)!
 
HI,
das mit der email hast du ja jetzt hingekriegt oder ?
Und mit dem Aktivierungslink mache es so, wie ts230 es gesagt hat, allerdings würde in die Datenbank eine Zeile "activate" oder so machen und dort eine eindeutige ID reinschreiben, und der user Klickt dann auf den Link "activate.php?id=seineid" und somit wird der Wert in der Datenbank von der ID auf z.B. "true" gesetzt. Das kannst du dann beim Login wiederum abfragen.

PS: zu deinem Script: schau dir mal die empty funktion von php an, außerdem solltest du die eingegebene email auf richtigkeit überprüfen !
 
hier der Code mit dem du ne Email seden kanst:+
PHP:
<?php
$empfaenger .= 'deine@email.com';

// Betreff
$betreff = '11';

// Nachricht
$nachricht = '
<html>
<head>
  <title>45tzerkontos</title>
</head>
<body>
Hallo
</body>
</html>
';

// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// zusätzliche Header
$header .= 'From: test <test@test.de>' . "\r\n";
// verschicke die E-Mail
mail($empfaenger, $betreff, $nachricht, $header);
?>
Das mit der Datenbank dürftest du alleine hinkriegen(wenn nicht,schreib hier nochmal!).

Zitat von crazymischl
Und mit dem Aktivierungslink mache es so, wie ts230 es gesagt hat, allerdings würde in die Datenbank eine Zeile "activate" oder so machen und dort eine eindeutige ID reinschreiben, und der user Klickt dann auf den Link "activate.php?id=seineid" und somit wird der Wert in der Datenbank von der ID auf z.B. "true" gesetzt. Das kannst du dann beim Login wiederum abfragen.
Das mit dem Aktivierungslink meint ich so:
alle führen auf register.php?action=activate;
Dort muss der User seinen Username und Passwort eingeben;
sein bei der Registrierung gezetzter Datenbank-Eintrag 'locked'
wird von 'true' auf 'false' gesetzt.
 
LOL ?

register.php?action=activate;

Damit ist das Double Opt-In Verfahren ja so gut wie zwecklos.

Du musst als GET Variable schon einen Key ö.Ä. übergeben, sonst könnte man den Account ja auch ohne die Email aktivieren. Wenn du einen zufällig generierten Key mit in die DB schreibst und diesen dann AUSSCHLIEßLICH über diese email versendest, macht das ganze erst Sinn.

Bsp. link in mail: register.php?action=activate&userid=23&key=34jsd349djsd93434sd

dieser key wird vor dem versenden eben auch in die db geschrieben zu dem entsprechendem user eben. und nur wenn dieser key mit der userid übereinstimmt wird der account freigeschaltet. Und da dieser key eben nur über die mail versendet wird ist sichergestellt, dass der user auch besitzer der email adresse ist.
 
Hi,
ich hab dein Script mal ein wenig erweitert:
PHP:
<?php
if ( $_GET[step] == 2) 
	{
    $name= $_POST['name'];
    $vorname= $_POST['vorname'];
    $adresse= $_POST['adresse'];
    $ort= $_POST['ort'];
    $plz= $_POST['plz'];
    $country= $_POST['country'];
    $day= $_POST['day'];
    $month= $_POST['month'];
    $year= $_POST['year'];
    $user= $_POST['user'];
    $password= $_POST['password'];
    $email= $_POST['email'];
    $ok= $_POST['ok'];
    $ok2= $_POST['ok2'];

    if ("" == $name) {
    echo('Fehler: Sie haben Ihren Nachnamen nicht angegeben. <br />');
    }
    if ("" == $vorname) {
    echo('Fehler: Sie haben Ihren Vornamen nicht angegeben. <br />');
    }
    if ("" == $adresse) {
    echo('Fehler: Sie haben Ihre Adresse nicht angegeben. <br />');
    }
    if ("" == $ort) {
    echo('Fehler: Sie haben Ihren Ort nicht angegeben. <br />');
    }
    if ("" == $plz) {
    echo('Fehler: Sie haben Ihre Postleitzahl nicht angegeben. <br />');
    }
    if ("" == $country) {
    echo('Fehler: Sie haben Ihr Heimatland nicht angegeben. <br />');
    }
    if (("" == $day) OR ("" == $month) OR ("" == $year)){
    echo('Fehler: Sie haben Ihr Geburtsdatum nicht vollst&auml;ndig angegeben. <br />');
    }
    if ("" == $user) {
    echo('Fehler: Sie haben Ihren Usernamen nicht angegeben. <br />');
    }
    if ("" == $password) {
    echo('Fehler: Sie haben kein Password definiert. <br />');
    }
    if ("" == $email) {
    echo('Fehler: Sie haben keine E-Mailadresse angegeben. <br />');
    }
    if (("" == $name) OR ("" == $vorname) OR ("" == $adresse) OR ("" == $ort) OR ("" == $plz) OR ("" == $country) OR ("" == $day) OR ("" == $month) OR ("" == $year) OR ("" == $user) OR ("" == $password) OR ("" == $email)){
    echo('Fehler: Bitte gehen Sie einen Schritt zur&uuml;ck und verfolst&auml;ndigen Sie Ihre angaben.');
    } else {
//#####################################################
//#####################################################
//#####################################################
	// ID generieren
	function generateID($length=8)
	{
		$dummy = array_merge(range('0', '9'));
		// shuffle array
		mt_srand((double)microtime()*1000000);
		for ($i = 1; $i <= (count($dummy)*2); $i++)
		{
			$swap = mt_rand(0,count($dummy)-1);
			$tmp = $dummy[$swap];
			$dummy[$swap] = $dummy[0];
			$dummy[0] = $tmp;
		}
		// get ID
		return substr(implode('',$dummy),0,$length);
	}

	$id = generateID(8); // 8 stellige ID als $id definieren
	
    $sql = "INSERT INTO user (name,vorname,adresse,ort,plz,country,day,month,year,user,password,email,id) VALUES ('$name','$vorname','$adresse','$ort','$plz','$country','$day','$month','$year','$user','$password','$email','$id')";
    $nachricht = "Hallo $user,/n
              Dies ist eine Testemail. Um deinen Account zu aktivieren, klicke bitte auf diesen Link: www.deinserver.de/register.php?step=activate&id=$id";
    $nachricht = wordwrap($nachricht, 70);
    mail('jdheldt@hotmail.com', 'Testemail', $nachricht);
    echo('Vielen Dank f&uuml;r ihre Registrierung. Sie k&ouml;nnen nach der registrierung per email einloggen');
    }
	}

if ($_GET[step] == activate)
{
	$id = $_GET['id'];
	if (isset($id) || !empty($id) {
		$sql = "UPDATE user Set id='true' WHERE id = '$id'";
		$ergebnis = mysql_query($sql);
		if ($ergebnis){
			echo "Ihr account wurde erfolgreich freigeschalten";
		} else {
			echo "es ist ein fehler aufgetreten.";
		}
	} else {
	echo "ihre ID ist nicht angegeben. Bitte geben sie den richtigen aktivierungslink ein";
	}
}	
?>

Du musst in deiner Datenbank eine weitere Spalte "id" machen.
In deinem einlogg-script kannst du dann abfragen:
PHP:
if (id = true) { 
//tu dich einloggen
} else { 
echo "ihr account ist noch nicht freigeschaltet" }

Frag weiter wenn du was nicht verstehst !
 
Zuletzt bearbeitet:
Jo,
Hier ist mein Log-In Script:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html><head> 
<body>
<?php session_start (); ?>
  <title>Login</title> 
</head> 

<body> 
<?php 
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Passwort oder Username falsch!"; 
} 
?> 
<form action="1.php" method="post"> 
  Name: <input type="text" name="name" size="20"><br> 
  Kennwort: <input type="password" name="pwd" size="20"><br> 
  <input type="submit" value="Login"> 
</form> 

</body></html>
Ich habe es als login.php abgespeichert(würde ich es als .htm-Datei speichern,würde das PHP nicht ausgefuhrt werden!).
Wo soll ich denn das
PHP:
if id = true { } elso { echo "ihr account ist noch nicht freigeschaltet" }
Einfügen?und Woher weiß jetzt das Script,Welche ID Freigeschaltet ist und welche nicht?
Oder machst du das mit
PHP:
include("register.php")
Das Script von dir hab ich in die Registrierung-Datei vor dem E-mail versenden reingetan.
Poste mir mal deine log-In Datei!
 
Zuletzt bearbeitet:
Zurück