Wanneer ik onderstaand pagina oproep, dan krijg ik een wit pagina.
Er is blijkbaar een syntax fout,maar ik kan het niet vinden.
live voorbeeld: jocke-overwater.nl/contact.php


<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// define variables and set to empty values
$vnaamErr = $anaamErr = $emailErr = "";
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  if (empty($_POST["voornaam"])) {
    $vnaamErr = "Graag uw voornaam invullen";
  } else {
    $voornaam = test_input($_POST["voornaam"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$voornaam)) {
      $vnaamErr = "Uw voornaam mag alleen letters en spaties bevatten";
    }
  }

  if (empty($_POST["achternaam"])) {
    $anaamErr = "Graag uw achternaam invullen";
  } else {
    $achternaam = test_input($_POST["achternaam"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$achternaam)) {
      $anaamErr = "Uw achternaam mag alleen letters en spaties bevatten";
    }
  }

  if (empty($_POST["mailadres"])) {
    $emailErr = "Graag uw mailadres invullen";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Het formaat van het ingevoerde mailadres is niet correct";
    }
  }

  $uwvraag = $_POST["mailadres"] ;
  if (empty($vnaamErr && $anaamErr && $emailErr)) {
    //mail versturen
  
    $to = "Naar het mailadres";
    $subject = "Mail afkomstig uit de website";
    $body = "";
    $body. = "Voornaam: " . $voornaam . "\r\n";
    $body. = "Achternaam: " . $achternaam . "\r\n";
    $body. = "Het mailadres: " . $voornaam . "\r\n";
    $body. = "Uw vraag: " . $uwvraag. "\r\n"; 
    $headers ="From: [email protected] \r\n";
    $headers .="MIME-Version: 1.0" . "\r\n";
    $headers .="Content-type:text/html;charset=UTF-8" . "\r\n";
    if (mail($to,$subject,$body)) {
      echo "bedankt voor uw mail. We nemen zsm contact met je op!";
    } else {
      echo "Mail niet verstuurd!";
    }
    
  } else {
    echo "Er is iets mis gegaan met het contactformulier.";
  }

}
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}



$page = "contact";
include "Inc/header.php";
?>
<div class="main">
<div class="formulier">
<h2>Contact formulier</h2><br/><br/>
<span>* verplichte velden</span><br/><br/>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
        <label for="Voornaam">Voornaam</label><br />
        <input type="text" id="voornaam" name="voornaam" value="<?php if (isset($_POST['voornaam']))echo htmlspecialchars($_POST['voornaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        <label for="achternaam">Achternaam</label><br />
        <input type="text" id="achternaam" name="achternaam" value="<?php if (isset($_POST['achternaam']))echo htmlspecialchars($_POST['achternaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        <label for="Mailadres">Mailadres</label><br />
        <input type="email" id="mailadres" name="mailadres" value="<?php if (isset($_POST['mailadres']))echo htmlspecialchars($_POST['mailadres'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        </br>
        <label for="uwvraag">Uw vraag:</label></br>
        <textarea id="uwvraag" name="uwvraag" rows="4" cols="50"></textarea></br></br>
        <input type="submit" value="Verzenden"> <input type="reset" value="Reset">
    </form>
  </div>  
  </div>
  <?php
include "Inc/footer.php";
?>
Zijn uw e-mail instellingen wel juist?

Gebruik anders phpmailer of een ander packet. Minder problemen en meer controle
Als je het nou eens gewoon even simpel houdt. Vergeet die hele lap code en maak een nieuwe pagina test.php aan met daarin het onderstaande:

<?php

echo 'Test pagina aangeroepen.';

$to = "[email protected]";
$subject = "Mail afkomstig uit de website";
$message= "";
$message.= "Voornaam: " .$voornaam. "\r\n";
$message.= "Achternaam: " .$achternaam. "\r\n";
$message.= "Het mailadres: " .$email. "\r\n";
$message.= "Uw vraag: " . $uwvraag. "\r\n";
$headers ="From: [email protected] \r\n";
$headers.="MIME-Version: 1.0" . "\r\n";
$headers.="Content-type:text/html;charset=UTF-8" . "\r\n";

mail($to,$subject,$message,$headers);

?>
Roep vervolgens de pagina test.php aan in je browser. Ontvang je de mail nu wel? Dan zit de fout in de rest van je code. Ontvang je de mail nog steeds niet, dan gaat er iets fout met het versturen.
- Ariën - op 24/09/2022 13:22:16

Hoe ziet je errors array eruit?

Zoals hierboven regel 4 of wat bedoel je precies?


[size=xsmall]Toevoeging op 24/09/2022 23:28:38:[/size]

Jan R op 24/09/2022 18:36:33

Zijn uw e-mail instellingen wel juist?

Gebruik anders phpmailer of een ander packet. Minder problemen en meer controle


Welke e-mailinstellingen bedoel je?
Ik heb geen ervaringen met phpmailer. Is het lastig te configureren voor een contactformulier?

[size=xsmall]Toevoeging op 24/09/2022 23:31:42:[/size]

Ozzie PHP op 24/09/2022 21:26:18

Als je het nou eens gewoon even simpel houdt. Vergeet die hele lap code en maak een nieuwe pagina test.php aan met daarin het onderstaande:

<?php

echo 'Test pagina aangeroepen.';

$to = "[email protected]";
$subject = "Mail afkomstig uit de website";
$message= "";
$message.= "Voornaam: " .$voornaam. "\r\n";
$message.= "Achternaam: " .$achternaam. "\r\n";
$message.= "Het mailadres: " .$email. "\r\n";
$message.= "Uw vraag: " . $uwvraag. "\r\n";
$headers ="From: [email protected] \r\n";
$headers.="MIME-Version: 1.0" . "\r\n";
$headers.="Content-type:text/html;charset=UTF-8" . "\r\n";

mail($to,$subject,$message,$headers);

?>
Roep vervolgens de pagina test.php aan in je browser. Ontvang je de mail nu wel? Dan zit de fout in de rest van je code. Ontvang je de mail nog steeds niet, dan gaat er iets fout met het versturen.


Dit werkt WEL bij mijn eigen ISP, maar niet bij het hostingbedrijf waar jocke-overwater.nl wordt gehost.
Overigens, de gehele code van contact.php werkt ook niet bij mijn eigen ISP....
>> maar niet bij het hostingbedrijf waar jocke-overwater.nl wordt gehost

Vervang deze regel:

mail($to,$subject,$message,$headers);

eens door

mail($to,$subject,$message,$headers, '-f [email protected]');

En probeer het dan nog eens.
Mohamed nvt op 24/09/2022 23:27:53

[quote="- Ariën - op 24/09/2022 13:22:16"]
Hoe ziet je errors array eruit?

Zoals hierboven regel 4 of wat bedoel je precies?
[/quote]
Ik heb het over hoe je array eruit ziet.
<?php
print_r($errors);
?>
En pas Ozzie's code aan naar dit:

<?php

echo 'Test pagina aangeroepen.';

$to = "[email protected]";
$subject = "Mail afkomstig uit de website";
$message= "";
$message.= "Voornaam: " .$voornaam. "\r\n";
$message.= "Achternaam: " .$achternaam. "\r\n";
$message.= "Het mailadres: " .$email. "\r\n";
$message.= "Uw vraag: " . $uwvraag. "\r\n";
$headers ="From: [email protected] \r\n";
$headers.="MIME-Version: 1.0" . "\r\n";
$headers.="Content-type:text/html;charset=UTF-8" . "\r\n";

if(mail($to,$subject,$message,$headers)) {
echo "Het is gelukt";
} else {
echo "Het is mislukt.";
}

?>

Dan zie je meteen of de mail() functie aangeroepen wordt.
Hoewel ikzelf toch liever phpMailer adviseer en dan via SMTP.
Dat werkt veel makkelijker, en is beter te debuggen omdat je dan meer controle hebt over de verbinding.
Ozzie PHP op 25/09/2022 00:37:20

>> maar niet bij het hostingbedrijf waar jocke-overwater.nl wordt gehost

Vervang deze regel:

mail($to,$subject,$message,$headers);

eens door

mail($to,$subject,$message,$headers, '-f [email protected]');

En probeer het dan nog eens.


Bij Strato webhosting werkt bovenstaande wel, maar bij Hostnet, waar het domeinnaam Jocke-Overwater.nl wordt gehost, helaas niet.

[size=xsmall]Toevoeging op 25/09/2022 13:44:27:[/size]

- Ariën - op 25/09/2022 00:44:33

[quote="Mohamed nvt op 24/09/2022 23:27:53"]
[quote="- Ariën - op 24/09/2022 13:22:16"]
Hoe ziet je errors array eruit?

Zoals hierboven regel 4 of wat bedoel je precies?
[/quote]
Ik heb het over hoe je array eruit ziet.
<?php
print_r($errors);
?>
En pas Ozzie's code aan naar dit:

<?php

echo 'Test pagina aangeroepen.';

$to = "[email protected]";
$subject = "Mail afkomstig uit de website";
$message= "";
$message.= "Voornaam: " .$voornaam. "\r\n";
$message.= "Achternaam: " .$achternaam. "\r\n";
$message.= "Het mailadres: " .$email. "\r\n";
$message.= "Uw vraag: " . $uwvraag. "\r\n";
$headers ="From: [email protected] \r\n";
$headers.="MIME-Version: 1.0" . "\r\n";
$headers.="Content-type:text/html;charset=UTF-8" . "\r\n";

if(mail($to,$subject,$message,$headers)) {
echo "Het is gelukt";
} else {
echo "Het is mislukt.";
}

?>

Dan zie je meteen of de mail() functie aangeroepen wordt.
Hoewel ikzelf toch liever phpMailer adviseer en dan via SMTP.
Dat werkt veel makkelijker, en is beter te debuggen omdat je dan meer controle hebt over de verbinding.
[/quote]

Wanneer ik print_r ($errors) aanroep, dan is het leeg!
Ik doe dit nadat ik gecontroleerd heb of de inhoud van de errors array groter is dan een 0

if (count($errors) == 0) {
    print_r($errors);


[size=xsmall]Toevoeging op 25/09/2022 13:45:51:[/size]

Ik heb een sterk vermoeden dat het probleem ligt aan Hostnet, waar het domeinnaam Jocke-overwater.nl wordt gehost, maar vreemd genoeg werkt de gehele code ook niet bij Strato..
Waar moet ik het zoeken denken jullie? Of vinden jullie dat ik perse moet overstappen naar PHPMailer?
Het probleem ligt niet bij je error-array.
Zelf raad ik aan om geen gebruik te krijgen van de mail()-functie en dus wel de SMTP-manier met phpMailer te gebruiken.
- Ariën - op 25/09/2022 13:53:00

Het probleem ligt niet bij je error-array.
Zelf raad ik aan om geen gebruik te krijgen van de mail()-functie en dus wel de SMTP-manier met phpMailer te gebruiken.

Oke, dankjewel voor jouw advies en ik ga mij verder verdiepen in PHPMailer.
Vreemd genoeg werkt de mail() wel bij Strato webhosting.
Heb je dit gelezen: https://helpdesk.hostnet.nl/hc/nl-nl/articles/360015074777-E-mail-versturen-vanaf-je-website

Wat levert dit stukje op:
<?php
if(mail($to,$subject,$message,$headers)) {
echo "Het is gelukt";
} else {
echo "Het is mislukt.";
}
?>

zegt PHP dat het gelukt is of niet?
Dit zegt namelijk of PHP de mail aan een mailserver kon overhandigen. Zeg maar zoals je een brief in de brievenbus op de hoek van de straat gooit.

Daarna kunnen er nog 100 dingen fout gaan: De server kan zelf detecteren dat het mailadres van de afzender niet bestaat en daarom de mail droppen.
De ontvangende servers kunnen concluderen dat de hostnet mailserver niet bij de afzender hoort en daarom de mail niet accepteren. Of dat de Hostnet server een te grote spamrating heeft.

Kortom: je kunt meekijken tot de mailserver hem aanpakt. En met PHPMailer kun je eventueel net iets meer info krijgen. Maar dan nog zit er verschil tussen "de mail wordt niet aangemomen door de mailserver" "de mail wordt niet verstuurd" en "de mail komt niet aan bij de ontvanger".

Effectief zal hij in deze 3 gevallen inderdaad niet aankomen bij de ontvanger, maar het waarom en op welke plek is de zoektocht.
Een paar tips voor goede afhandeling van de mail()-functie:

- Gebruik je eigen domeinnaam in het mailadres als afzender, dus geen hotmail.com, gmail.com of whatever.com

- Zorg dat het mailadres ook bestaat als alias die aan een mailbox of forwarder gekoppeld is.

Maar phpMailer blijft het beste.

Reageren