Ga naar inhoud

e-mail met form verzenden in een html zonder outlook (wel met php)


Aanbevolen berichten

ik heb een formulier die moet worden verstuurt naar me e-mail zonder naar outlook te gaan met mijn (html & PHP) bestanden lukt het niet...

dit zijn de bestanden:

html:

<form action="contact.php" method="post">

<TABLE BORDER=0>

<TR>

<TD>naam:</TD>

<TD>

<input type="text" id="naam" name="naam">

</TD>

</TR>

<TR>

<TD> e-mail:</TD>

<TD>

<input type="email" id="e-mail" name="e-mail">

</TD>

</TR>

<TR>

<TD>bericht:</TD>

<TD>

<input type="textarea" rows="4" id="bericht" name="bericht"><br />

</TD>

</TR>

<TR>

<TD COLSPAN=2>

<input type="submit" value="submit" />

<input type="reset" value="reset" />

</TD>

</TR>

</TABLE>

</form>

php:

<html>

<head>

<title>Untitled Document</title>

</head>

<body>

<?php

$naam = $_POST['naam'];

$email = $_POST['e-mail'];

$bericht = $_POST['bericht'];

$message .= "naam: \n";

$message .= $naam;

$message .= "\n";

$message .= "bericht: \n";

$message .= $bericht;

mail("naam van mail", "Subject: message", $message, "From: $email");

Header("Location: contact.html");

?>

</body>

</html>

weet iemand wat ik verkeerd heb gedaan??

en hoe hij dan automatisch terug gaat naar de pagina van het formulier???

aangepast door marcelbbb
email-adres verwijdert wegens mogelijk spam
Link naar reactie
Delen op andere sites

Mijn excuses voor het wat late antwoord.

Om eerst wat correctie te geven op het html formulier.

<input type="email" id="e-mail" name="e-mail">

-- moet zijn --

<input type="email" id="email" name="email">

Er mogen geen streepjes in staan. Het mag wel, maar is niet verstandig.

<input type="textarea" rows="4" id="bericht" name="bericht">

-- moet zijn --

<textarea name="bericht" id="bericht" rows="4" cols="20"></textarea>

Een textarea moet je op de bovenstaande manier aanroepen.

Rows staat voor het aantal rijen boven elkaar. (dit is de hoogte van je tekstvak)

Cols staat voor het aantal kolommen naast elkaar. (dit is de breedte van je tekstvak)

Nu het PHP scriptje.

Dit bestandje moet sowieso 'contact.php' heten. Omdat je dit in je formulier hebt ingegeven:

<form action="contact.php" method="post">

Om er eerst zeker van te zijn dat mensen niet zelf het bestandje contact.php gaan bezoeken zet je eerst een if-functie om heel je script heen:

(let wel op: je html code moet dan bij de submit knop ook een name hebben: name="submit")

if(isset($_POST['submit'])){
     // hier de rest van het script
}else{
     die('u heeft het formulier niet ingevuld');
}

Ik zelf maak altijd eerst een aantal variabelen aan:

$naam_to = "john doe";
$email_to = "john@doe.com";
$subject  = "het onderwerp";

$naam_to staat voor de naam van de ontvanger van de mail (bijvoorbeeld jij zelf)

$email_to staat voor het emailadres van de ontvagner (kan dus ook jijzelf zijn).

Om er zeker van te zijn dat mensen hun naam en/of emailadres invullen moet er rond bepaalde tags een if-functie gezet worden.

$naam = $_POST['naam'];

// wordt dan

if(!empty($_POST['naam'])){
     $naam = $_POST['naam'];
}else{
      die('u heeft geen naam ingevuld');
}

Dit kun je ook gebruiken voor de email en voor het bericht.

De volgorde van boven naar beneden bepaald ook de volgorde (in dit geval) van de controle. Eerst naam, dan email, dan bericht.

Om een mooie opmaak mee te geven aan je berichtje typ ik zelf een soort sjabloon voordat ik de code ga opmaken.

Dat kan bijvoorbeeld zo:


$sjabloon = "
De heer of mevrouw {naam} heeft het formulier ingevuld.<br>
Dit heeft hij/zij gedaan met het volgende email adres: {email}. <br>
Het bericht wat hij/zij stuurde heeft de volgende inhoud:<br>
<br>
{bericht}
<br>
<br>
met vriendelijke groet,<br>
<br>
Systeembeheerder
";

Nu heb je een sjabloon met een aantal zogenaamde 'tags' erin staan. Deze kun je vervangen met een stukje code genaamd str_replace.

dat gaat zo:

$message = str_replace("{naam}", $naam, $sjabloon); 
// hiermee heb je de tag: {naam} veranderd in de naam die ingevuld is in het formulier
// dit kun je gewoon herhalen met {email} en ook met {bericht}.
// voor bericht moet je nog wat andere code maken, maar dat zie je verderop staan.

Dan heb je nog de handler om de mail te versturen. Die heb je zelf ook al gebruikt dat is de code: mail()

Hierbij heb je nog een aantal extra eigenschappen dat html code verstuurd kan worden als html code en niet als tekst.

Dit zie je verder onderin wel staan.

Om te controleren of de mail ook echt daadwerkelijk verzonden is kun je ook daar weer een if-functie omheen zetten.

if(mail('mijnemail', 'onderwerp', 'bericht')){
    echo "de mail is succesvol verzonden";
}else{
    die("de mail is niet verzonden, contacteer de beheerder");
}

Uiteindelijk krijg je dus het volgende:

<?php 
if(isset($_POST['submit'])){
    $name_to = "John Doe";
    $email_to = "john@doe.com";
    $subject  = "onderwerp";

    if(!empty($_POST['naam'])){
          $naam = $_POST['naam']; 
    }else{
          die("U heeft geen naam ingevuld");
    }

    if(!empty($_POST['email'])){
           $email = $_POST['email']; 
     }else{
           die("U heeft geen emailadres ingevuld");
     }

    if(!empty($_POST['bericht'])){
           $bericht = $_POST['bericht']; 
     }else{
           die("U heeft geen bericht geschreven");
     }
    $sjabloon = "
    De heer of mevrouw {naam} heeft het formulier ingevuld.<br>
     Dit heeft hij/zij gedaan met het volgende email adres: {email}. <br>
     Het bericht wat hij/zij stuurde heeft de volgende inhoud:<br>
     <br>
     {bericht}
     <br>
     <br>
     met vriendelijke groet,<br>
     <br>
     Systeembeheerder
     ";
    $message = str_replace("{naam}", $naam, $sjabloon);
    $message = str_replace("{email}", $email, $message);
    $bericht = nl2br($bericht);
    $message = str_replace("{bericht}", $bericht, $message);

    $headers  = 'MIME-Version: 1.0\r\n';
    $headers .= 'Content-type: text/html; charset=iso-8859-1\r\n';
    $headers .= 'To: ' .$name_to. ' <' .$email_to. '>\r\n';
    $headers .= 'From: ' .$naam. ' <' .$email. '>\r\n';

    if(mail($email_to, $onderwerp, $message, $headers)){
         echo "De mail is succesvol verzonden, u wordt teruggestuurd naar het formulier";
         ?>
         <script language="javascript">setTimeout('document.location.href = "contact.html"', 2000);</script>
         <?
    }else{
         die("De mail kon niet verzonden worden, gelieve de beheerder te contacteren");
    }

}else{
    die('U heeft het formulier niet ingevuld');
}
?>

Het kan zijn dat het script wat fouten geeft, maar dat komt omdat ik dit nu even zo uit het hoofd heb geschreven, niet zelf uitgetest.

Als de wijzigingen van contact.html (in het formulier) worden veranderd. En het scriptje vanuit het laatste vakje kopieer je naar contact.php. Dan kun je een mail sturen vanuit een website.

Let er wel mee op, Dit kan niet uitgetest worden op je eigen computer (zonder webserver). HTML code kun je wel uittesten, maar PHP code is een server side scripting taal. Wat op een server uitgevoerd moet worden. Je kunt dit alleen testen als je het upload naar een webserver of een webserver download bijvoorbeeld "UsbWebserver".

Laat even weten of er wat foutjes in zitten, en op welke regel de PHP code aan geeft dat dat zit. Dan kan ik verder kijken om het script wat te bewerken dat het wel werkt.

Groeten,

Leroy

aangepast door leroy
Link naar reactie
Delen op andere sites

ik heb nou op een site gezet maar hij zegt dat ik hem niet heb ingevuld :|

html(contactformulier.html):

<FORM Action="contact.php" Method="post" Enctype="text/plain">

naam bedrijf:<br /> <INPUT Type="text" Name="bedrijf" Size="20"><br />

tel. nummer:<br /> <input type="text" name="nummer" size="20">

<br />

aanvraag:<br /> <TEXTAREA Name="aanvraag" Rows="8" Cols="60"></TEXTAREA><br />

<INPUT Type="submit" Value="versturen" name="submit">

<INPUT Type="reset" Value="Wissen" name="reset">

</FORM>

PHP(contact.php):

<html>

<head>

<title>Untitled Document</title>

</head>

<body>

<?php

if(isset($_POST['submit'])){

$name_to = "eddy herling";

$email_to = "marcel@fritsprint.nl";

$onderwerp = "aanvraag";

if(!empty($_POST['bedrijf'])){

$bedrijf = $_POST['bedrijf'];

}else{

die("u heeft uw bedrijf niet ingevuld");

}

if(!empty($_POST['nummer'])){

$nummer = $_POST['nummer'];

}else{

die("U heeft geen telefoonnummer ingevuld");

}

if(!empty($_POST['aanvraag'])){

$aanvraag = $_POST['aanvraag'];

}else{

die("U heeft geen aanvraag ingevoerd");

}

$sjabloon = "

beste $name_to

{bedrijf} heeft het formulier ingevuld en heeft het volgens nummer:{nummer}.<br>

Het bericht wat hij/zij stuurde heeft de volgende inhoud:<br>

<br>

{aanvraag}

<br>

<br>

met vriendelijke groet,<br>

<br>

Systeembeheerder

";

$message = str_replace("{bedrijf}", $bedrijf, $sjabloon);

$message = str_replace("{nummer}", $nummer, $message);

$aanvraag = nl2br($aanvraag);

$message = str_replace("{aanvraag}", $aanvraag, $message);

$headers = 'MIME-Version: 1.0\r\n';

$headers .= 'Content-type: text/html; charset=iso-8859-1\r\n';

$headers .= 'To: ' .$name_to. ' <' .$email_to. '>\r\n';

$headers .= 'From: ' .$bedrijf. ' <' .$nummer. '>\r\n';

if(mail($email_to, $onderwerp, $message, $headers)){

echo "De mail is succesvol verzonden, u wordt teruggestuurd naar het formulier";

?>

<script language="javascript">setTimeout('document.location.href = "contactformulier.html"', 2000);</script>

<?

}else{

die("De mail kon niet verzonden worden, gelieve de beheerder te contacteren");

}

}else{

die('U heeft het formulier niet ingevuld');

}

?>

</body>

</html>

Link naar reactie
Delen op andere sites

De reden dat hij weergeeft dat het formulier niet ingevuld is is omdat je in de <form> tag en Enctype hebt gezet met de eigenschappen text/plain.

Hierdoor zal hij alleen de invoervakjes, keuzevakjes, keuzebolletjes etc doorgeven aan het PHP script. Als je dit weghaalt, doet het schript het wel. Heb het net thuis even uitgetest.

Ik zie wel dat je het nog een beetje moet aanpassen.

De volgende regel:

$headers .= 'From: ' .$bedrijf. ' <' .$nummer. '>\r\n';

Betekend namelijk het volgende:

From: naam <emailadres>

Nu worden deze gegevens ingevuld met de volgende gegevens:

From: bedrijfsnaam van invuller <telefoonnummer>

Dat mag niet gebruikt worden,

Je kunt deze gegevens wel vastzetten door variabelen te maken zoals:

$name_from = "testpersoon";

$email_from = "testpersoon@johndoe.com";

Op deze manier zou je het dan eigenlijk moeten invullen.

Voor de rest staat alles goed.

Ow, ik zie net dat je de locatie naar het formulier in de Javascript code nog moet wijzigen naar jouw contactformuliertje.

de functie nl2br($aanvraag); betekend dat de Enters die ingevuld zijn in het formulier omgezet worden in de html code: "<br />" Zodat de enters ook goed in de mail weergegeven worden, anders is de aanvraag alleen maar tekst dat achter elkaar staat.

Laat het weten als het niet werkt.

Groeten,

leroy

Link naar reactie
Delen op andere sites

Je moet het zegmaar zien dat de FROM naam <email> het email adres is van de persoon die de aanvraag indient.

Als op elk mailtje wat jij binnen krijgt geen reactie op hoeft te geven vul je bij naam bijvoorbeeld jouw eigen bedrijfsnaam in en bij email noreply@bedrijfsnaam.be.

Dit is helemaal naar eigen voorkeur in te stellen.

De FROM ben jij wanneer jij een mailtje verstuurd naar iemand via Outlook of een ander E-mail programma.

De FROM is een andere persoon wanneer iemand jou een mailtje heeft gestuurd.

Dit kan dus geen telefoonnummer zijn. Want op een telefoonnummer kun je geen mailtje terugsturen.

Groeten,

Leroy

Link naar reactie
Delen op andere sites

×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.