hey,

Ik heb deze mail handler ongeveer 2 jaar geleden geschreven. Nu alles werkte toen perfect. Nu pas ik mijn code aan voor de mail afhandelaar te gebruiken voor een andere website waar ik aan het werk ben. Nu ik vul alles in op het contact form en hij geeft geen fouten ofzo hij zegt dqt het verzonden is. maar heb hem ingesteld op mijn email adres en krijg gewoon niets binnen. al gezocht maar vind zelf geen fouten. Mss iemand die me hier kan helpen.

contact form

<form action="verwerking.php" method="post">
    			<div>
        		<label for="name">Naam:</label>
        		<input type="text" id="name" name="name" />
    			</div>
    			<div>
        		<label for="mail">E-mail:</label>
        		<input type="e-mail" id="e-mail" name="e-mail" />
    			</div>
    			<div>
        		<label for="msg">Bericht:</label>
        		<textarea id="msg" name="msg"></textarea>
    			</div>
    
    			<div class="button">
        		<button type="submit">Send your message</button>
    			</div>
				</form>

en de php:
<?php  
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (empty($_POST['name'])) { 
        $error .= "naam is niet ingevuld<BR />"; 
    }   if (empty($_POST['e-mail'])) { 
        $error .= "e-mail is niet ingevuld<BR />";  
    } if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
  		echo '';
	} else {
 		 $error .= "Geen geldig email adres<BR />";
	} if (empty($_POST['msg'])) { 
        $error .= "Uw vraag of opmerking is niet ingevuld<BR />"; 
    }
     
    if (empty($error)) { 

        $bericht  .= "Mijn naam is: ". $_POST['name'].
					 " 
					 Mijn email is: ".$_POST['e-mail'].
					 " 
					 mijn vraag of opmerking is: ".$_POST['msg'];
       
	   mail("[email protected]", "reactie van de website", $bericht, "FROM: website naam");
	   echo "Uw aanvraag is verstuurd. We zullen u zo snel mogelijk contacteren."; header('Refresh: 3; url=contact.html');
          
    } else { 
     
        echo "Gelieve alle gegevens correct in te vullen.<BR/><BR />"; 
        echo "<FONT COLOR=\"#FF0000\">".$error."</FONT>";
         
    } 
     
} else { 
    
    echo "Formulier niet verstuurd. Gelieve alle gegevens correct in te vullen."; 

} 
?> 

ik weet niet echt waar de fout zit.
Gebruik de juiste mailheaders:
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders

En bouw ook foutafhanding in op je mail-functie. Als je foutmeldingen uit hebt staan, dan zien gebruikers altijd de melding dat het verstuurd is, zonder dat PHP er wat over kan zeggen.

Dus:

<?php
if(mail(....)) {
	echo "Uw aanvraag is verstuurd. We zullen u zo snel mogelijk contacteren."; 
	header('Refresh: 3; url=contact.html');
} else {
	echo "De mail is niet verstuurd vanwege een technische fout.";
}
        
?>


En even los van je probleem: <FONT> is al behoorlijk verouderd. Gebruik liever CSS om je tekst te stylen.
@- Ariën -: Vergeet het if()je niet.
- moet er bij FROM geen mailadres staan?

- ik zou bij regel 37/41 de functie htmlspecialchars() gebruiken.
Dat voorkomt dat iemand een stukje html/script opneemt in zijn bericht.

Ik heb er dit van gemaakt :

$mail_ontv = "[email protected]";
$subject = "Reactie van de website";
$headers = "From: " . $_POST['name'] . " <" . $_POST['e-mail'] . ">";
$bericht = "Mijn naam is: " . $_POST['name'] . "\n";
$bericht .= "Mijn email is: " . $_POST['e-mail'] . "\n";
$bericht .= "Mijn vraag of opmerking is: " . $_POST['msg'] . "\n";

mail($mail_ontv, $subject , $bericht, $headers);
Okee, en wat zijn de bevindingen?

Let wel op header-injection. Iemand kan je headers eenvoudig manipulueren via je formulier en eventueel spam versturen. En pas foutafhandeling toe op je mail() functie.
Als je nu [email protected] invult in het vakje Email, dan verstuurt jouw server dus een mail die afkomstig zou zijn van Obama.

De ontvangende mailserver zou daar zomaar zijn vraagtekens bij kunnen plaatsen. Immers, jouw server staat vast niet te boek als een legitieme afzender van mails van dat domein.

Begin eerst eens om daar info@jouwdomain in te vullen. En check of jouw dns settings zodanig zijn dat jouw server ook mail van dat domein zou moeten mogen versturen.

Daarna zou je nog kunnen kijken of je ook nog een andere afzender bij ReplyTo kunt invullen.
Bedenk dat er een verschil is tussen "mail wordt niet verstuurd" en "ik zie de mail niet aankomen".

Zeker partijen als Hotmail en Gmail hebben vrij strikte regels om spam tegen te gaan.
Daarom gebruik ik liever PHPmailer of een andere kant en klare package om te mailen. Die hebben alle mailheaders en veiligheden al aan boord.
maar ook PHPmailer etc. kunnen niet controleren of het opgegeven mailadres mag versturen via de aangegeven server.

In principe komt de mail van (FROM) jouw server / jouw domain.

Daarnaast is er de ReplyTo optie, waarbij aangegeven wordt aan wie een antwoord gestuurd moet worden:

Eerste link die ik zo 123 vond via Google die dit aanstipt. Er is vast ook duidelijker uitleg te vinden:
http://serverfault.com/questions/398981/should-one-use-from-reply-to-or-both-headers-to-reflect-their-clients-emai

Ivo P op 26/09/2016 15:37:17

maar ook PHPmailer etc. kunnen niet controleren of het opgegeven mailadres mag versturen via de aangegeven server.

True, maar het voorkomt wel dat iemand headers aan past om er vervolgens mee te spammen.
@Adoptive Solution ik heb jou oplossing geprobeerd maar neen.Ik krijg maar geen emails binnen. Vind dit heel raar.

@arien ja ik weet dat <font> al oud is. dit wordt nog aangepast ;) is ondertussen al een tijdje geleden geschreven :D


@iedereen kan het zijn dat er ergens een fout zit waardoor de ingegeven tekst niet wordt opgenomen in de php ofzo. Ik gok maar wat veel ervaring met php heb ik nog niet. maar ben wel aan het bijleren :D

Reageren