17. oktober 2007 - 13:34Der er
16 kommentarer og 1 løsning
Mail form i PHP
Hej jeg har et spørgsmål ang en mail form.
Jeg skal bruge en mail form til min hjemmeside.
Jeg har søgt lidt information rundt her på siden, men uden held. Søgte videre hos w3, men de eksempler de har virker slet ikke.
Nogen som kan komme op med en simpel form som sender en mail fra en hjemmeside. hvor bruger bare skal intaste sit navn, sin egen mailadresse og tekstboks.
if($navn == "" || strlen($navn) < 5) // Hvis navnet er mindre end 5; { $error['navn'] = true; $print_again = true; }
/* MAIL CHECK - function */
// First, we check that there's one @ symbol, and that the lengths are right if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $mail)) { // Email invalid because wrong number of characters in one section, or wrong number of @ symbols. $error['mail'] = true; $print_again = true; } // Split it into sections to make life easier $mail_array = explode("@", $mail); $local_array = explode(".", $mail_array[0]); for ($i = 0; $i < sizeof($local_array); $i++) { if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) { $error['mail'] = true; $print_again = true; } } if (!ereg("^\[?[0-9\.]+\]?$", $mail_array[1])) { // Check if domain is IP. If not, it should be valid domain name $domain_array = explode(".", $mail_array[1]); if (sizeof($domain_array) < 2) { $error['mail'] = true; $print_again = true; } for ($i = 0; $i < sizeof($domain_array); $i++) { if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) { $error['mail'] = true; $print_again = true; } } }
Og denne her er en smule spamsikret :-) Den tjekker om der blive skrevet i det skjulte felt "subjekt" er der det, så sender den ikke. Det skal (kan) laves over tre sider.
Og side2 (mailsend.php): <? if (!empty($_POST['subject'])) { header ("Location: sendt.php"); exit; } ?>
<?php if (isset($_POST['submit'])) { if (!empty($_POST['name']) && // tjek, at der er skrevet et navn !empty($_POST['email']) && // tjek, at der er skrevet en e-mail-adresse !empty($_POST['emne']) && // tjek, at der er skrevet et emne !empty($_POST['besked']) && // tjek, at der er skrevet en besked
// her følger sikringen mod spambotter !strpos($_POST['name'], "ditdomain.dk") && // tjek, at dit domæne ikke er skrevet i feltet "navn" !strpos($_POST['email'], "ditdomain.dk") && // tjek, at dit domæne ikke er skrevet i feltet "email" !strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn" !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i "navn" !eregi("\n",$_POST['name']) && // tjek, at der ikke er "linjeskift" i "navn" !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i "email" !eregi("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift" i "email"
// er alt ok, fortsættes med afsendelse af mailen { $headers="From: ".$_POST['name']."<".$_POST['email'].">"; if (@$_POST['customer_copy']) { $headers .= "\r\nBcc: ".$_POST['email']; }
$timeZoneOffset = +1; //timezone where the user is (use an additional script to determine this variable)
$body .= "Via ditdomain.dk er der sendt denne mail fra: " . $_POST['name'] . ":\r\n\r\n" . $_POST['besked'] ; if (@mail("din@mail.dk", strip_tags($_POST['emne']), stripslashes(strip_tags($body)), $headers)) { echo "<font color='#000000' face='Verdana, Arial, Helvetica' size='2'><br><br><br> <p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>"; } else { echo "<font color='#000000' face='Verdana, Arial, Helvetica' size='2'><br><br><br> <p>Mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>"; } } else { echo "<font color='#000000' face='Verdana, Arial, Helvetica' size='2'><br><br><br> <p>Mailen kunne ikke sendes, alle felter skal udfyldes korrekt!</p>"; } } ?>
Og side3 sendt.php(vises hvis det er en spambot der har udfyldt det skjulte felt): Your mail is sendt. Thank you!
// men det er bare løgn, der blev ikke sendt noget.
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\jan2\kontakt.php on line 28
jeg går ud fra at serveren er installeret på din egen maskine...
har du en mailserver installeret på din maskine også?
der må stå i din php.ini at den skal bruge localhost til mailserver, og den kan den ikke connecte til (Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini)
[mail function] ; For Win32 only. SMTP = localhost
; For Win32 only. sendmail_from = you@yourdomain
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path =
; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_paramaters =
ja der står SMTP jo til localhost, så din mail(); prøver at sende via port 25 på din maskine, og hvis du ikke har en mail-server installeret, vil den naturligvis melde fejl...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.