Hoe ook al weer email form html website werkend krijgen?

Status
Niet open voor verdere reacties.
Niet verwonderlijk als je weer een stap verder gaat dan waar ik gebleven was.

Die hele controle staat ook op de verkeerde plaats, maar goed, op dat punt was ik nog niet eens.
Hierdoor loopt je script in de soep met een onverwachte accolade.
 
Code:
<?php
// Foutafhandeling van PHP aanzetten. In productie deze onderste twee lijnen commentariseren met een // ervoor.
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1); 
 
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
 
// bestanden
$dir = str_replace('\\', '/', dirname(__FILE__) . '/PHPMailer/src');
echo "Pad naar PHPmailer is: " . $dir;
 
// laad de benodige bestanden in
require $dir . '/Exception.php';
require $dir . '/PHPMailer.php';
require $dir . '/SMTP.php';
 
// Tijdzone instellen
date_default_timezone_set('Europe/Amsterdam');
 
if ($_SERVER['REQUEST_METHOD'] == "POST") {
  $response = $_POST["g-recaptcha-response"];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
    'secret' => 'keyxxxxx',
    'response' => $_POST["g-recaptcha-response"]
    );
    $options = array(
    'http' => array(
        'method' => 'POST',
        'content' => http_build_query($data)
    )
    );
    $context = stream_context_create($options);
    $verify = file_get_contents($url, false, $context);
    $captcha = json_decode($verify);

    // debugging om te kijken of het werkt.
    echo "<pre>".print_r($captcha,true)."</pre>";    

    //Create a new PHPMailer instance
    $mail = new PHPMailer();
 
    //Tell PHPMailer to use SMTP
    $mail->isSMTP();
 
    $mail->SMTPDebug = 2; // Debugging voor SMTP. 0 = uit, of 1,2 of 3 voor hogere debugging. 2 is gangbaar bij testen.
    $mail->Host = 'mail.provider.nl'; // bijvoorbeeld 'mail.ziggo.nl'
    $mail->SMTPSecure = 'ssl'; // 'ssl' of 'tls'
    $mail->Port = 465; // 465 (bij ssl) of 587 (bij tls)
    $mail->SMTPAuth = true;
  
    //SMTP Authenticatie
    $mail->Username = 'test@example.nl'; // emailadres of emailnaam of emailcode ofzo
    $mail->Password = 'wachtwoord';
 
    // E-mail instellingen
    $mail->setFrom('test@example.nl', ''); // Stel de afzender in, dit moet een bestaande afzender zijn.
    $mail->addReplyTo($_POST['contact_email'], $_POST['contact_name']); // Stel een Reply-To adres in
    $mail->AddAddress("test@example.nl" ,"Naam Bedrijf");
    $mail->Subject = 'Aanvraag informatie'; // Stel hier het onderwerp in
    $mail->Body = $_POST['contact_message']; // Stel hier de body van de mail in.
 
    // Verzend het bericht
    if (!$mail->send()){
        echo 'Mailer Error: ' . $mail->ErrorInfo; 
    } else {
        echo 'Bericht is verzonden';  
    }
 
}
?>

En nu niet steeds een eigen weg gaan! Echt hinderlijk!

Dit moet laten zien wat de uitkomst van de re-captcha is.
Wat komt daar uit?
 
Laatst bewerkt door een moderator:
moment, ik had de key nog niet


Code:
Pad naar PHPmailer is: /..../..../domains/example.nl/public_html/test/PHPMailer/src
Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in /..../..../domains/example.nl/public_html/test/mailer.php on line 38

stdClass Object
(
    [success] => 1
    [challenge_ts] => 2021-09-08T15:33:54Z
    [hostname] => test.example.nl
    [score] => 0.9
    [action] => submit
)


Warning: Undefined array key "contact_email" in /..../..../domains/example.nl/public_html/test/mailer.php on line 62

Warning: Undefined array key "contact_name" in /..../..../domains/example.nl/public_html/test/mailer.php on line 62
Invalid address: (Reply-To):

Warning: Undefined array key "contact_message" in /..../..../domains/example.nl/public_html/test/mailer.php on line 65
Mailer Error: Message body empty

En nu niet steeds een eigen weg gaan! Echt hinderlijk!
ik doe het echt niet express.
ik ga nergens meer heen en doe alleen nog wat je zegt.
 
Laatst bewerkt door een moderator:
Laatste drie errors spreken voor zich. -> controleer formulier

En het PHPmailer deel op de juiste plek zetten waar je voorheen je recaptcha controle had.

Logisch kijken en het gaat zeker lukken. :)
 
yes!
email is verzonden, ik krijg de email binnen.

ik had gelezen dat bij post wel dezelfde naam moet staan als bij het formulier. Kijk, dat vergeet ik nooit meer hahaha.

En het PHPmailer deel op de juiste plek zetten waar je voorheen je recaptcha controle had.
eh, deze vat ik nog niet.

Maar we zijn er nog niet, want nu moet ik nog krijgen dat de mail is verzonden op de website, dus dat het formulier terugkeert naar de website en dat je dan leest dat het is verzonden.

op de witte pagina staat nu:
Code:
Pad naar PHPmailer is: /..../..../domains/example.nl/public_html/test/PHPMailer/src
Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in /..../..../domains/example.nl/public_html/test/mailer.php on line 38

stdClass Object
(
    [success] => 1
    [challenge_ts] => 2021-09-08T17:53:14Z
    [hostname] => test.example.nl
    [score] => 0.9
    [action] => submit
)
en dan een lap tekst en dan bericht is verzonden
 
Laatst bewerkt door een moderator:
Okay, laten we verder gaan.... :)
We gaan er echt wel komen hoor :)

Wat er moet gebeuren is dat er een if-else statement om je hele PHPmailer-code komt. Een if-else statement is niets anders dan:
"Als de voorwaarde overeenkomt, doe dan dit, en anders dat."

Dit stukje was op sich prima, maar het stond op de verkeerde plek.
Op de plek waar je de echo neerzet dat de inzending is goedgekeurd, moet je het hele PHPmailer-script plaatsen.
Want: "Of iemand wordt gezien als een robot, en anders ben je dus geen robot. Een mens dus, en dan moet er ge-mailed worden."

En dat uiteraard binnen de hele hele if-statement blok van je if ($_SERVER['REQUEST_METHOD'] == "POST") { .... }

Code:
if ($captcha->success == false || $captcha->score <= 0.5) {
       echo "Sorry! Je bent gedetecteerd als een robot. Stuur maar een mail!";
    } else {
       echo "Je inzending is goedgekeurd";
      // stuur hier een mail
    }

Als je het goed dus heb je dus een aantal ingenestte controles.
Zie ook: https://www.w3schools.com/php/php_if_else.asp

Als je verder nog de boel wil aanpassen, dan kan je altijd nog een aantal if-elses inbouwen voor validatie of een mailadres is ingevuld, en eventueel voldoet aan de juiste notatie.
 
Laatst bewerkt:
ik snap het niet.
Code:
if ($captcha->success == false || $captcha->score <= 0.5) {
       echo "Sorry! Je bent gedetecteerd als een robot. Stuur maar een mail!";
    } else {
       echo "Je inzending is goedgekeurd";
      // stuur hier een mail
    }
waar moet ik deze code neerzetten? Stond deze verkeerd dan? Ik heb dit toch gedaan zoals je zei?

Op de plek waar je de echo neerzet dat de inzending is goedgekeurd, moet je het hele PHPmailer-script plaatsen.

Ik wil het zo graag snappen maar ik snap het niet. Ik ben te vroeg geboren denk ik....of te wel, ik ben te oud voor dit.
Wat ik wel weet is dat ik nooit meer one-pages ga maken, voor niemand niet.
 
Lees het commentaar gewoon in die code.
Het zijn aanwijzingen.

Als je snapt hoe if, elseif en else werkt, dan zal je dit ook wel snappen. :)

Dus je moet niet zomaar code rücksichtslos kopiëren en plakken, maar deze in de juiste logica in je script plaatsen.

Komt erop neer:
Of je bent een bot, of (else) de mail verstuur je met PHPmailer.
Vertaal dit eens in een if else...... ;)
 
Laatst bewerkt:
sorry, dit gaat mijn pet echt te boven.
Ooit een gemaakt met hulp van hier, toen werkte het wel. Nu snap ik het gewoon niet.

Ik verdoe jullie tijd, jullie geduld.
 
sorry, dit gaat mijn pet echt te boven.
Het is eigenlijk niets anders dan logica bouwen, en dit vertalen naar Nederlandse zinnen.
Als je niet probeert, dan leer je ook niets.

Je weet hoe je moet mailen, je hebt de code om te controleren of je een bot bent, of niet.

Het is enkel combineren. Probeer het eens!
Het is niks anders dan:
If(Controle of je een bot bent) {
- Ja, je bent een bot
} else (
- geen bot, maar een mens. We gaan mailen
}

Vertaal dit eens naar PHP-code.
Probeer nou maar gewoon! :)
 
Laatst bewerkt:
If (......) betekent 'Als de voorwaarde....'
Else if (.....) betekent 'En anders als de voorwaarde.... '
Else betekent 'En anders dit'
 
Ooit een gemaakt met hulp van hier, toen werkte het wel. Nu snap ik het gewoon niet.
Klopt. dat is al een tijd terug. Je hebt toen een formulier met reCaptcha V3 van mij getest op jouw website. Dat ging je best goed af. Ik gebruikte het voor de eerste keer en vroeg op helpmij of ze het reCaptcha V3 script wilden testen. Inmiddels zijn er veel (verschillende) voorbeelden te vinden hoe deze reCaptcha in een formulier kan worden gezet.

Ik verdoe jullie tijd, jullie geduld.
Zolang de helpers helpen verdoe je niet hun tijd lijkt mij :D :D
 
Mijn advies voor Femke is om eens met de code te spelen, en niet bang te zijn voor fouten. Daar leer je van.

Het meeste werk komt tot nu toe van een bordje af, en ergens moet je toch zelf ook eens uitvinden hoe het werkt. Want wat nu als je klant straks vraagt om een IP-adres mee te sturen, of wat anders?

Ik snap dat je werkgebied veel bij Wordpress ligt, maar ergens kan je niet altijd bij WordPress oplossingen blijven.
Dus ga eens leren en oefenen hoe PHP werkt, en hoe het script werkt.
 
Laatst bewerkt:
Tja, het is nu allemaal abracadabra.
Daarom heb ik besloten het anders te doen.

De klant heeft (helaas haha) voor de one-page gekozen, dus ja.....
Omdat zij geen gebruik maken van smpt en hosting email in hun eigen emailaccount maar een outlook emailadres hebben en die voor hun bedrijf gebruiken, haal ik het contactformulier weg en zet er een link naar de mail toe.
Voor hun net zo makkelijk en ze vinden het oké.
Ik zet dan wel een onderwerp neer en had in mijn hoofd of ik al tekst kon neerzetten in het bericht, maar dat weet ik eigenlijk niet. Tekst moet dan zijn: vergeet uw gegevens en telefoonnummer niet...of zoiets.

Verder had ik op de WP website een portfolio van hun werk, maar die willen ze nu op die one-page.
Dus even kijken of ik dat kan realiseren.
Moet gaan lukken.
 
Tja, het is nu allemaal abracadabra.
Ik kan mij eerlijk gezegd niet indenken dat het met mijn uitleg nog abracadabra is. Als je iets niet snapt ben je vrij om uit te leggen wat je dan niet snapt. Maar als je enkel zegt dat je het niet snapt, dan kunnen wij er ook weinig mee.

Een mail met link kan ook, maar in het algemeen wordt een formulier meer gewaardeerd, vooral omdat je kan inspelen om de juiste gegevens te vragen.

Hopelijk nog een nieuwe poging?
 
Laatst bewerkt:
ja, de klant zegt dat ze eigenlijk alles via de telefoon doen, dus het was in orde.

Nu alleen de portfolio nog en dan mogen ze nogmaals kiezen.

Ik ben jullie zeer dankbaar maar het kwartje valt echt niet.
En ik weet eerlijk gezegd ook niet wat ik moet snappen en het is ook moeilijk uit te leggen wat ik niet snap.
Als ik je tekst lees denk ik al, hu? Weet je, ik baal er ook van. Ik ben iemand die dan maar zegt, oké ik hou ermee op. Ik heb voor hete vuren gestaan, maar dit wil gewoon niet.

Het spijt mij echt. Maar nogmaals, ik ben jullie en vooral Aar zeer dankbaar.
 
Oke, het is prima :)
Laat het rustig bezinken, en denk er eens over na om later eens een PHP-tutorial proberen. Zo verbreed je jouw horizon en kan je nog meer maatwerk aan klanten aanbieden. :)

PHP lijkt moeilijk, maar het is eigenlijk voor beginners de makkelijkste programmeertaal. ;)
 
@femke. Het formulier uit jouw index.php heb ik als startpunt in de bijlage gezet met alle bestanden die nodig zijn.
Alleen nog mailer-config.php invullen, en dan uploaden.
Op mijn pc werkt het, ik heb het niet op een live domein getest, misschien iets voor jou ;)
 

Bijlagen

  • recapt.v3.formulier.zip
    61,2 KB · Weergaven: 7
Laatst bewerkt:
P.S. jouw /assets/ map zit vol met kopieën van kopieën van kopieën ...
Oké...Zou dat komen door het mp4 bestandje, bedenk ik mij; ik ga er naar kijken., ik duik de direactadmin in.

Wat zijn jullie lief.
Aar, je hebt mij verrast, echt. Nogmaals dank voor al je moeite.

Bron, heel hartelijk dank, ik ga dit nog een keer proberen. Mocht het werken hoera, mocht het niet werken, tja....dan ga ik het anders doen.

De enige assets map die ik kan vinden staat in de root
en dan bij wp-analytify en daar zie ik niets bijzonders. (dus in wp-content/plugins/wp.....)
 
Laatst bewerkt door een moderator:
Alles gedaan, helaas niet verstuurd

key ingevuld, wachtwoord ingevuld,

Vraagje: is de recaptcha verzendknop niet vergeten in deze? Of is de code anders nu?
Oh wacht, de key vergeten in te vullen, dus de secret key had ik gedaan, maar die andere moet nog. Mijn fout.

hm, weer niet
Bericht is niet verstuurd (geen recaptcha communicatie)

deze regel
Code:
grecaptcha.execute(<?php echo '"'xxxxx'"' ?>, {action:"validate_captcha"})
veroorzaakt een witte regel.
De key is goed.
maar zie '"', staan die er niet te veel in?

Heb de regel met de key even weer gezet zoals jij deze had gegeven, en nu heb ik weer beeld.

(ik zie als ik zoek op deze code wel andere varianten zoals:
Code:
grecaptcha.execute('put your site key here', {action: 'create_comment'}).then(function(token) {
of deze
Code:
grecaptcha.execute('your reCAPTCHA site key here', {action:'validate_captcha'})
zonder de echo
 

Bijlagen

  • Screenshot 2021-09-10 at 13-05-07 Inpandige sloopwerken (zoals badkamers, vloeren, plafonds, mur.png
    Screenshot 2021-09-10 at 13-05-07 Inpandige sloopwerken (zoals badkamers, vloeren, plafonds, mur.png
    19,6 KB · Weergaven: 13
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan