PHP form alles werkt maar geen mail
ik heb een formulier gemaakt met .php voor op mijn website zodat mensen vragen kunnen stellen en dat deze vraag dan wordt verstuurd naar mijn mail maar het formulier werkt maar ik krijg geen mail binnen in mijn inbox!
wat moet ik doen of wat heb ik fout gedaan?
mvg tom
De relevante code tonen...
Gewijzigd op 21/12/2012 21:05:55 door Tom Reitsema
Ze bedoeld de code die het formulier verstuurd.
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
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
<?php
if($_SERVER['REQUEST_METHOD']=="POST")
{
if(strlen($_POST['name']) == 0)
{ $error_msg ="- Voer astublieft uw naam in.<br/>"; }
if(!ereg("^[_a-zA-Z0-9-]+(\.[*@([a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $_POST['uwemail']))
{ $error_msg .="- Voer astublieft een geldig email adres in.<br/>"; }
if(strlen($_POST['field']) ==0)
{ $error_msg .="- Laat aub weten wat je aan ons wilt vragen.<br/>"; }
if(!empty($error_msg))
{
//Een van de velden werd niet goed ingevuld
echo "<b>Contact webmaster kon niet worden uitgevoerd door volgende redenen:</b><br><br>";
echo $error_msg;
echo "<br>Klik alstublieft op <a href=javascript:history.back(1)>Ga terug</a> en vul alle velden in.<br><br>";
}
else
{
$recipient = "[email protected]"; //Het email adres van de persoon die vragen moet ontvangen.
$subject = $_POST['sub']; //Subject van de mail.
$header = "From: " . $_POST['uwemail'] . "\n";
$mail_body = "Contact script werd op " . date("d-m-Y") . " om " . date("H:i") . " uur uitgevoerd.\n";
$mail_body .= "De volgende persoon vulde het contact formulier in:\n\n";
$mail_body .= "Naam: " . $_POST['name'] . "\n";
$mail_body .= "E-mailadres: " . $_POST['uwemail'] . "\n\n";
$mail_body .= "Bericht:\n";
$mail_body .= $_POST['field'];
$mail_body .= "\n\n -- Einde van het contact bericht --";
mail($recipient, $subject, $mail_body, $header);
echo "<b>Uw bericht is succesvol verzonden</b><br/>Er zal zo spoedig mogelijk contact met u opgenomen worden.</b><br/>";
echo "<a class=\"main\" href='javascript:history.back(1)'>Ga terug</a>";
}
}
else
{
?>
if($_SERVER['REQUEST_METHOD']=="POST")
{
if(strlen($_POST['name']) == 0)
{ $error_msg ="- Voer astublieft uw naam in.<br/>"; }
if(!ereg("^[_a-zA-Z0-9-]+(\.[*@([a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $_POST['uwemail']))
{ $error_msg .="- Voer astublieft een geldig email adres in.<br/>"; }
if(strlen($_POST['field']) ==0)
{ $error_msg .="- Laat aub weten wat je aan ons wilt vragen.<br/>"; }
if(!empty($error_msg))
{
//Een van de velden werd niet goed ingevuld
echo "<b>Contact webmaster kon niet worden uitgevoerd door volgende redenen:</b><br><br>";
echo $error_msg;
echo "<br>Klik alstublieft op <a href=javascript:history.back(1)>Ga terug</a> en vul alle velden in.<br><br>";
}
else
{
$recipient = "[email protected]"; //Het email adres van de persoon die vragen moet ontvangen.
$subject = $_POST['sub']; //Subject van de mail.
$header = "From: " . $_POST['uwemail'] . "\n";
$mail_body = "Contact script werd op " . date("d-m-Y") . " om " . date("H:i") . " uur uitgevoerd.\n";
$mail_body .= "De volgende persoon vulde het contact formulier in:\n\n";
$mail_body .= "Naam: " . $_POST['name'] . "\n";
$mail_body .= "E-mailadres: " . $_POST['uwemail'] . "\n\n";
$mail_body .= "Bericht:\n";
$mail_body .= $_POST['field'];
$mail_body .= "\n\n -- Einde van het contact bericht --";
mail($recipient, $subject, $mail_body, $header);
echo "<b>Uw bericht is succesvol verzonden</b><br/>Er zal zo spoedig mogelijk contact met u opgenomen worden.</b><br/>";
echo "<a class=\"main\" href='javascript:history.back(1)'>Ga terug</a>";
}
}
else
{
?>
<form action="" method="POST" name="contact">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><br>
<table width="80%" height="155" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="2"> </td>
<td height="2"><font size="1"><strong>(Velden met een * zijn verplicht)</strong></font></td>
<td height="2"> </td>
</tr>
<tr>
<td height="2">Naam : </td>
<td height="2" colspan="2"> <input type="text" name="name" size="20">
<font size="2">* </font></td>
</tr>
<tr>
<td height="2">Email adres :</td>
<td height="2" colspan="2"> <input type="text" name="uwemail" size="20">
<font size="2"> * </font></td>
</tr>
<tr>
<td width="321" class="Kleiner"> Subject :</td>
<td colspan="2"> <input type="text" name="sub" size="20"> </td>
</tr>
<tr>
<td width="321" class="Kleiner">Vraag :</td>
<td width="216" rowspan="2"> <textarea name="field" wrap="VIRTUAL" cols="20"></textarea>
<font size="2"> </font></td>
<td width="257"><font size="2">*</font></td>
</tr>
<tr>
<td width="321" class="Kleiner"> </td>
<td> </td>
</tr>
<tr>
<td width="321"> </td>
<td colspan="2"> <div align="left">
<input type="Submit" name="Submit" value="Verzenden">
</div></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%">
<tr>
<td> </td>
</tr>
</table>
</td>
</tr>
</table>
</form>
Php knipper op 21/12/2012 21:06:20:
dat is niet de code die -Aar- bedoeld.
Ze bedoeld de code die het formulier verstuurd.
Ze bedoeld de code die het formulier verstuurd.
Lol, Aar is een hij :)
welke code dit is de enige code die ik heb :S
In je code zie ik staan:
Code (php)
1
2
2
mail($recipient, $subject, $mail_body, $header);
echo "<b>Uw bericht is succesvol verzonden</b><br/>Er zal zo spoedig mogelijk contact met u opgenomen worden.</b><br/>";
echo "<b>Uw bericht is succesvol verzonden</b><br/>Er zal zo spoedig mogelijk contact met u opgenomen worden.</b><br/>";
Je gaat er dus zelf maar vanuit dat het gelukt is? het is netter om met een if-statement om je mail() functie een controle te maken of het wel of niet gelukt is op de server. Dit zegt natuurlijk niks of het wel of niet verzonden is, maar het geeft wel aan of de server tot zover het mailen ondersteunt.
Gewijzigd op 21/12/2012 21:24:59 door - Ariën -
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
if($_SERVER['REQUEST_METHOD']=="POST")
{
if(strlen($_POST['name']) == 0)
{ $error_msg ="- Voer astublieft uw naam in.<br/>"; }
if(!ereg("^[_a-zA-Z0-9-]+(\.[*@([a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $_POST['uwemail']))
{ $error_msg .="- Voer astublieft een geldig email adres in.<br/>"; }
if(strlen($_POST['field']) ==0)
{ $error_msg .="- Laat aub weten wat je aan ons wilt vragen.<br/>"; }
if(!empty($error_msg))
{
//Een van de velden werd niet goed ingevuld
echo "<b>Contact webmaster kon niet worden uitgevoerd door volgende redenen:</b><br><br>";
echo $error_msg;
echo "<br>Klik alstublieft op <a href=javascript:history.back(1)>Ga terug</a> en vul alle velden in.<br><br>";
}
else
{
$recipient = "[email protected]"; //Het email adres van de persoon die vragen moet ontvangen.
$subject = $_POST['sub']; //Subject van de mail.
$header = "From: " . $_POST['uwemail'] . "\n";
$mail_body = "Contact script werd op " . date("d-m-Y") . " om " . date("H:i") . " uur uitgevoerd.\n";
$mail_body .= "De volgende persoon vulde het contact formulier in:\n\n";
$mail_body .= "Naam: " . $_POST['name'] . "\n";
$mail_body .= "E-mailadres: " . $_POST['uwemail'] . "\n\n";
$mail_body .= "Bericht:\n";
$mail_body .= $_POST['field'];
$mail_body .= "\n\n -- Einde van het contact bericht --";
mail($recipient, $subject, $mail_body, $header);
echo "<b>Uw bericht is succesvol verzonden</b><br/>Er zal zo spoedig mogelijk contact met u opgenomen worden.</b><br/>";
echo "<a class=\"main\" href='javascript:history.back(1)'>Ga terug</a>";
}
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" name="contact">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><br>
<table width="80%" height="155" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="2"> </td>
<td height="2"><font size="1"><strong>(Velden met een * zijn verplicht)</strong></font></td>
<td height="2"> </td>
</tr>
<tr>
<td height="2">Naam : </td>
<td height="2" colspan="2"> <input type="text" name="name" size="20">
<font size="2">* </font></td>
</tr>
<tr>
<td height="2">Email adres :</td>
<td height="2" colspan="2"> <input type="text" name="uwemail" size="20">
<font size="2"> * </font></td>
</tr>
<tr>
<td width="321" class="Kleiner"> Subject :</td>
<td colspan="2"> <input type="text" name="sub" size="20"> </td>
</tr>
<tr>
<td width="321" class="Kleiner">Vraag :</td>
<td width="216" rowspan="2"> <textarea name="field" wrap="VIRTUAL" cols="20"></textarea>
<font size="2"> </font></td>
<td width="257"><font size="2">*</font></td>
</tr>
<tr>
<td width="321" class="Kleiner"> </td>
<td> </td>
</tr>
<tr>
<td width="321"> </td>
<td colspan="2"> <div align="left">
<input type="Submit" name="Submit" value="Verzenden">
</div></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%">
<tr>
<td> </td>
</tr>
</table>
</td>
</tr>
</table>
</form>
<?php
}
?>
Je zult dan zien dat dit verouderd is / komt te vervallen.
Haal je mailadres uit je code ;-)
Beveilig je mailbericht; neem niet zonder beveiliging de invoer via $_POST waarden over.
Wordt de lus met het e-mailen wel doorlopen?
Gebruik liever phpmailer of swiftmailer (om niet het wiel opnieuw uit te vinden en je geen zorgen te hoeven maken over allerlei instellen van de mailfunctie van php).
Gebruik bij php (echo) bij voorkeur ' en dan in HTML ". Scheelt je regelmatig escapen. In bovenstaande code ben je sowieso inconsequent en gebruik je voor HTML eerst " en daarna '.
Zorg voor duidelijkheid in je script. In bovenstaand voorbeeld heb je 2x een } onder elkaar staan. Welke hoort waarbij? Zorg mbv inspringen dat je dit direct kunt zien. Zie je ook veel sneller of je elke { afsluit met een }
[code[$_SERVER['PHP_SELF'] wordt als onveilig gezien. Laat dan liever leeg.
http://www.scriptorama.nl/security/tips-veiligere-site-phpself
Het gebruik van een table is niet echt meer van deze tijd voor een formulier.
En waarom plaats je een table in een table?
Gewijzigd op 21/12/2012 21:30:03 door Obelix Idefix
ik heb de code van iemand anders
Tom Reitsema op 21/12/2012 20:52:46:
ik heb een formulier gemaakt met .php voor op mijn website
Tom Reitsema op 21/12/2012 21:40:36:
ik heb de code van iemand anders
Of het script van jou is of copy/paste vind ik niet zo spannend.
Jij wilt de code gaan gebruiken; ik probeer je op een aantal zaken te wijzen.
Mogelijk/vermoedelijk is $header onvolledig. Daarom de tip om voor mailen phpmailer of swiftmailer te gebruiken.
Obelix en Idefix op 21/12/2012 21:28:52:
Haal je mailadres uit de code ;-)
Gewijzigd op 21/12/2012 22:07:58 door Obelix Idefix
Quote:
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
De mailheaders zijn niet goed.
heb je je mail instellingen in de php.ini wel goed staan?
ik heb nog niks ingesteld in php.ini :S
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.ziggo.nl
; http://php.net/smtp-port
smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [email protected]
Ik gebruik het smtp relay van ziggo
jij dient het van jouw provider te gebruiken
Vergeet daarna niet je webserver te rebooten!
Als je host bij een hostingbedrijf of een gratis host/domein (zoals woelmuis) heb je volgens mij geen toegang tot je php.ini en kun je je webserver ook niet rebooten.
terechte opmerking....ik was er gemakshalve vanuit gegaan dat tom de webserver zelf draaide
Ik run mijn eigen server
is het nu gelukt dan? werkt je mailfunctie?
Nee ik post straks mijn php.ini