PHP Mail
Dit script om een mail te zenden werkt perfect op mijn index page wanneer ik de mail manueel ingeef. Wanneer ik dit doe in mijn formulier, werkt hij niet meer. Ik heb al gecontroleerd of de mail correct was.
Weet iemand hier meer over?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($_POST['resend']) {
if (trim($_POST['mail2']) == '') {
$errors[] = 'U moet uw mail ingeven!';
}
if (trim($_POST['lastname2']) == '') {
$errors[] = 'U moet uw naam ingeven!';
}
if (trim($_POST['firstname2']) == '') {
$errors[] = 'U moet uw voornaam ingeven!';
}
if (count($errors) == 0) {
$mail = $_POST['mail2'];
$lastname = $_POST['lastname2'];
$firstname = $_POST['firstname2'];
$sql = "SELECT code FROM users WHERE lastname='" . mysqli_real_escape_string($connection, $_POST['lastname2']) . "' AND firstname='" . mysqli_real_escape_string($connection, $_POST['firstname2']) . "' AND mail='" . mysqli_real_escape_string($connection, $_POST['mail2']) . "' AND activated='0' LIMIT 1";
$result = mysqli_query($connection, $sql) or die(mysqli_error());
$randomString = mysqli_fetch_assoc($result);
$from = "[email protected]";
$subject = 'DreamShare Account Activation';
$message = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>DreamShare</title></head><body style="margin:0px; font-family:Tahoma, Geneva, sans-serif;"><div style="padding:10px; background:#333; font-size:24px; color:#CCC;"><a href="http://www.dreamshare.tk"><img src="http://www.dreamshare.tk/images/connected.png" width="100px" alt="DreamShare" style="border:none; float:left;"></a>DreamShare Account Activation</div><div style="padding:24px; font-size:17px;">Hallo ' . $lastname . ' ' . $firstname . ',<br /><br />Klik op onderstaande link om je account te activeren!<br /><br /><a href="http://www.dreamshare.tk/activation.php?mail=' . $mail . '&code=' . $randomString . '&username=' . $username . '">Kilk hier om je account nu te activeren!</a><br /><br />Na het activeren kan je inloggen met onderstaande gegevens:<br />* Mail: <b>' . $mail . '</b></div></body></html>';
$headers = "From: $from\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
mail($_POST['mail2'], $subject, $message, $headers);
$good1 = true;
} else {
$err2 = true;
}
}
}
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($_POST['resend']) {
if (trim($_POST['mail2']) == '') {
$errors[] = 'U moet uw mail ingeven!';
}
if (trim($_POST['lastname2']) == '') {
$errors[] = 'U moet uw naam ingeven!';
}
if (trim($_POST['firstname2']) == '') {
$errors[] = 'U moet uw voornaam ingeven!';
}
if (count($errors) == 0) {
$mail = $_POST['mail2'];
$lastname = $_POST['lastname2'];
$firstname = $_POST['firstname2'];
$sql = "SELECT code FROM users WHERE lastname='" . mysqli_real_escape_string($connection, $_POST['lastname2']) . "' AND firstname='" . mysqli_real_escape_string($connection, $_POST['firstname2']) . "' AND mail='" . mysqli_real_escape_string($connection, $_POST['mail2']) . "' AND activated='0' LIMIT 1";
$result = mysqli_query($connection, $sql) or die(mysqli_error());
$randomString = mysqli_fetch_assoc($result);
$from = "[email protected]";
$subject = 'DreamShare Account Activation';
$message = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>DreamShare</title></head><body style="margin:0px; font-family:Tahoma, Geneva, sans-serif;"><div style="padding:10px; background:#333; font-size:24px; color:#CCC;"><a href="http://www.dreamshare.tk"><img src="http://www.dreamshare.tk/images/connected.png" width="100px" alt="DreamShare" style="border:none; float:left;"></a>DreamShare Account Activation</div><div style="padding:24px; font-size:17px;">Hallo ' . $lastname . ' ' . $firstname . ',<br /><br />Klik op onderstaande link om je account te activeren!<br /><br /><a href="http://www.dreamshare.tk/activation.php?mail=' . $mail . '&code=' . $randomString . '&username=' . $username . '">Kilk hier om je account nu te activeren!</a><br /><br />Na het activeren kan je inloggen met onderstaande gegevens:<br />* Mail: <b>' . $mail . '</b></div></body></html>';
$headers = "From: $from\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
mail($_POST['mail2'], $subject, $message, $headers);
$good1 = true;
} else {
$err2 = true;
}
}
}
?>
Waaruit blijkt dat het niet werkt? Welke ongewenste acties gebeuren er? Wat zie je?
Alles doet het, ik krijg de mail alleen niet aan!
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders
Mogelijk werkt het dan wel. Controleer ook eens met print_r() of je $_POST-array klopt.
Dank je! Nu komt de mail wel aan maar nu krijg ik het aan als html-code!
$html = true;
Wat me verder opvalt: je maakt nieuwe variabelen aan. Waarom?
Op de ene plek gebruik je vervolgens toch $_POST en verder op de nieuwe. Waarom niet overal $_POST?
Weet je altijd waar het vandaan komt en dat je moet controleren / beveiligen.
Verder hebben ze al eens tegen mij gezegd dat extra variabelen aanmaken slecht was. Waarom is dit eigenlijk slecht?
Toevoeging op 16/05/2016 13:31:38:
Als ik $html op true zet dan krijg ik de mail ook niet meer aan.
Chris Claes op 16/05/2016 13:23:31:
Verder hebben ze al eens tegen mij gezegd dat extra variabelen aanmaken slecht was. Waarom is dit eigenlijk slecht?
Technisch neemt het ruimte (resources) in.
"Belangrijker" vind ik dat je zinloos bezig bent. Waarom zou je extra regels scripten als die niets extra's opleveren?
Daarbij: door de originele waarde te gebruiken weet je ook waar het vandaan komt ($_POST komt altijd extern, $variabele kan in jouw situatie zowel externe als interne bron hebben). Interne variabelen zijn in principe veilig(er) dan externe input. Daar zul je dus rekening mee moeten houden met o.a. weergeven en opslaan in database en dat is makkelijker als je weet of het wel/niet extern is.
Quote:
Verder hebben ze al eens tegen mij gezegd dat extra variabelen aanmaken slecht was. Waarom is dit eigenlijk slecht?
Als je deze enkel kopieert van A naar B, en vervolgens maar één keer aan B refereert is dit nogal loos. Maar als je vaker refereert aan een variabele met een lange naam dan bereik je op een zeker moment een soort van omslagpunt. Wel zul je je altijd moeten afvragen en realiseren waar (de waarde van) een variabele vandaan komt. De introductie van een nieuwe variabele moet een zekere meerwaarde hebben.
Quote:
Interne variabelen zijn in principe veilig(er) dan externe input.
Hm. Dit gaat alleen op als je een stricte scheidslijn trekt tussen interne en externe (gebruikers)data en alleen als je ervoor zorgt dat je deze data filtert (en mogelijk converteert) als je deze omzet van "extern" naar "intern". Dit gebeurt bijvoorbeeld meestal niet bij data die de database ingaat. Deze wordt doorgaans in een ongewijzigde/rauwe vorm opgeslagen (ook omdat escaping-on-input vaak onpraktisch is).
Het is misschien een betere gewoonte om alle data die niet in het script zelf gedefinieerd wordt, dus ook data die uit een database komt, te beschouwen als extern en er van uit te gaan dat deze onbetrouwbaar is.
Ok dank je! Maar wat met de mail die als html-code aankomt?
Kans dat het daarmee goed gaat is groter dan zelf lopen stoeien met de mailfunctie van php.
Hangt er maar net vanaf of de reis of de bestemming belangrijker is. Het stoeien met de mailfunctie kan best leerzaam zijn en met het artikel waar Ariën eerder aan refereerde kun je best een eind komen.
Thomas van den Heuvel op 16/05/2016 14:37:58:
met het artikel waar Ariën eerder aan refereerde kun je best een eind komen.
Ik gebruik dat altijd en heb nog nooit problemen gehad.
Niettemin raad ik net als Obelix & Idefix aan om PHPmailer of Swiftmailer te gebruiken. Met deze kant-en-klare mail-library kan je met het gebruik van enkele functieaanroepen een mail versturen. Alle juiste ingrediënten voor het versturen van een mail zijn hierin al aanwezig.