Ik weet niet wat ik fout doe, als ik een mail verstuur krijg ik wel de mail binnen maar geen melding. Hetzelfde type script gebruik ik voor een terugbelverzoek en deze werkt wel. (is een kleinere versie).
Wie kan mij op weg helpen?

<?php
define( "RECAPTCHA_V3_SECRET_KEY", 'XXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxxx' );

if ( isset( $_POST[ 'email' ] ) && $_POST[ 'email' ] ) {
$email = filter_var( $_POST[ 'email' ], FILTER_SANITIZE_STRING );
} else {
// set error message and redirect back to form...
// echo "<script> alert('Je bericht kon niet worden verzonden.')</script>";
exit;
}

$token = $_POST[ 'token' ];
$action = $_POST[ 'action' ];
// Sender's Name
$name = $_POST[ "name" ];

// call curl to POST request
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"; );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( array( 'secret' => RECAPTCHA_V3_SECRET_KEY, 'response' => $token ) ) );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec( $ch );
curl_close( $ch );
$arrResponse = json_decode( $response, true );

// verify the response
if ( $arrResponse[ "success" ] == '1' && $arrResponse[ "action" ] == $action && $arrResponse[ "score" ] >= 0.7 ) {
echo "Uw CAPTCHA response was verkeerd";
exit;
} else {

// controle op lege velden..
if ( $_POST[ "email" ] == "" ) {
echo "Niet alle velden zijn ingevuld";
} else {

// Check if the "Sender's Email" input field is filled out
$email = $_POST[ "email" ];

// Sanitize E-mail Address
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );

// Validate E-mail Address
$email = filter_var( $email, FILTER_VALIDATE_EMAIL );
if ( !$email ) {
echo "<script> alert('foutief emailadres')</script>";
} else {
$to = "[email protected]";
$subject = "Website formulier";
$message = "Afzender: " . $_POST[ "name" ] . "\r\n" . "Email: " . $_POST[ "email" ] . "\r\n" ."Bericht: " . $_POST[ "message" ];
$headers = "From:" . $email . "\r\n";

// Message lines should not exceed 70 characters (PHP rule), so wrap it
$message = wordwrap( $message, 70, "\r\n" );

// Send Mail By PHP Mail Function
if ( mail( $to, $subject, $message, $headers ) ) {
echo "<script> alert('$name bedank voor uw bericht. Wij zullen u zo snel mogelijk antwoorden.');
window.location.href='index.html';
</script>";
} else {
echo "<script> alert('Je bericht kon niet worden verzonden. Verander je e-mailadres of neem contact op met $to.')</script>";
exit;
}
}
}
}
?>
Ik raad aan om je mailadres hier even uit je code te halen, voordat deze door spambotjes wordt opgespoord.
Bedoel je verder dat de mail leeg is?
Ik verwacht een alert met de melding "$name bedank voor uw bericht. Wij zullen u zo snel mogelijk antwoorden.". Het email bericht wordt volledig opgemaakt gestuurd met alle info.
Ik krijg wel een bericht bij het terugbel script met de melding en de mogelijkheid om ok te klikken en dan ga je terug naar index.html
Maar wat zie je dan wel? En waarom eigenlijk een alert, en niet gewoon direct op het scherm tonen?
Overigens ik krijg nu al spam binnen via dit webformulier??
Als je kijkt op de website dieetbegeleiding.nl kun je een terugbel verzoek doen en krijg je een alert, onderaan bij het mailform gaat hij naar de submit.php pagina en blijft daar hangen.
Ik vind dit een mooie oplossing vandaar dat ik dit zo gemaakt heb.
Probeer maar eens.
Alert vind ik persoonlijk niet echt bedoeld voor zulke dingen. Maar wat bedoel je: Blijft hangen?
Wat gebeurt er precies? Blijft hij zoeken naar een bepaalde URL? Of zie je een leeg scherm na het volledig laden?
Ik zie overigens ook helemaal geen HTML? en een <script> blok met een alert(); hoort toch wel in een <body> blok thuis welke op zijn beurt weer in een <html> blok hoort.


<!doctype>
<html>
    <head>
        <title>hallo</title>
    </head>
    <body>
        <script>
            alert('test');
        </script>
    </body>
</html>

Reageren