Hoe ook al weer email form html website werkend krijgen?

Status
Niet open voor verdere reacties.
En nog een idee @femke98, de site in WP maken? Maar ach, zo is het natuurlijk ook leuk en vast leerzaam. Voor een 1 pagina site is alleen PHP wel snel.
haha, ik heb 2 websites gemaakt voor het bedrijf, ze wilde ene one-page website maar heb toch ook een andere gemaakt. Enja, zwart vinden ze mooi. (is dus de url zonder test. ervoor).

Ze hebben verder nog geen andere tekst geleverd dus of het deze wordt is maar de vraag, maar ik wil weten hoe het werkt met dat phpmailer gedoe. Altijd handig om dit te kunnen, heb het ooit eerder gedaan met hulp van hier, maar ik wist het echt niet meer.

De rest van de berichten doorloop ik morgen, moet zo naar de hartkliniek en nog wat werken.
Dus, wordt vervolgd.

Heb ik al gezegd dat ik blij ben met jullie en met jullie geduld?
Ook dank aan Aar, die nadat zijn naam is veranderd, ook zelf veranderd lijkt, een mooie verandering!
 
Om te weten hoe en of PHPmailer werkt is het handig om een simpel voorbeeld te maken die direct mailt. Dus even zonder formulier- en validatiepoespas.

Zet gerust de SMTPdebugging op 2. En kijk wat er gebeurt op de weg naar het 'SMTP-postkantoor'.
 
Laatst bewerkt:
Om te weten hoe en of PHPmailer werkt is het handig om een simpel voorbeeld te maken die direct mailt. Dus even zonder formulier- en validatiepoespas.
dus via Social Media

E-mail ons

dat heb ik zonet gedaan, mail komt in de spam, maar komt dus wel binnen.
Maar dat is dus via je eigen e-mailprogramma.
 
Deze regel
Code:
$mail->setFrom('noreply@sdevxxxxx.nl', 'No Reply');
moet een bestaand emailadres op jouw domein zijn.
Als dit niet zo is, dan kan een email door SPF checks worden tegengehouden.

En natuurlijk tijdens het testen even $mail->SMTPDebug op 2 zetten ;)

dat was dus niet het geval, straks uitproberen.
 
dus via Social Media

E-mail ons

dat heb ik zonet gedaan, mail komt in de spam, maar komt dus wel binnen.
Maar dat is dus via je eigen e-mailprogramma.
Huh? Gewoon een script met enkel PHPmailer, die een mail stuurt bij het aanroepen. Als dat goed werkt, dan is het de bedoeling dat je dit uitbouwt met layout, formulieren en validatie.

Via een mail via je eigen mailprogramma doe je niks met PHPmailer. Dat spreekt wel voor zich, denk ik zo :p
 
Laatst bewerkt:
Gebaseerd op Bron's code, en op het voorbeeld van PHPmailer zelf kan je dit eens proberen:

PHP:
<?php
//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');

//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 = '_______';    // 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 = '_____@_____.nl';  // emailadres of emailnaam of emailcode ofzo
$mail->Password = '_____';

// E-mail instellingen
$mail->setFrom('_____@_____.nl', 'Mijn Bedrijf'); // Stel de afzender in, dit moet een bestaande afzender zijn.
$mail->addReplyTo('____@_____.nl', 'First Last'); // Stel een Reply-To adres in
$mail->addAddress('____@_____.nl', 'John Doe'); // Stel hier de geadresseeerde in
$mail->Subject = 'PHPMailer SMTP test'; // Stel hier het onderwerp in
$mail->Body = "Dit is een test e-mail vanuit PHPmailer."; // Stel hier de body van de mail in.


// Verzend het bericht.
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message sent!';
}
?>

Even invullen en uitvoeren. Dan weet je in ieder geval of het werkt, en met welke instellingen.
Daarna kan je dit verder uitbouwen.

Even de flow over hoe een mail loop per situatie:
Linkje naar mailto:
Mailen gaat via het mailprogramma van de gebruiker. Die is zelf verantwoordelijk voor het versturen van de e-mail, en de mail wordt verzonden vanaf zijn/haar computer vanaf zijn/haar aansluiting.
Het mailprogramma zorgt ervoor dat de mail op het SMTP-postkantoor van zijn/haar provider uitkomt. Is er geen mailprogramma aanwezig of zijn de instellingen bij diegene fout, dan zal de e-mail nooit verstuurd kunnen worden. Dit is niet handig in combinatie met een formulier.

De mail() functie van PHP
De e-mail wordt afgeleverd op de webserver, en die zorgt ervoor dat die verzonden wordt en (hopelijk) op het SMTP-postkantoor komt.
Hier kan je weinig aan aanpassen, debuggen of troubleshooten.
Ik raad gebruik van deze functie af.

Via PHPmailer en $mail->isSMTP() wat aanstaat
Je bepaalt zelf naar welk SMTP-postkantoor je de e-mail stuurt. Dit kan ook die van je eigen internetprovider zijn in plaats van die van je webhosting.
Je kan via de debug-functies exact zien of het SMTP-postkantoor het accepteert.
Aanrader!
 
Laatst bewerkt:
Joehoe, ben weer bezig!
Ik moest gisteren een stress echo van mijn hart laten maken, nu kan ik weer eens kijken of ik het werkend krijg.

Heb gedaan wat Bron zei dat ik moest doen.
Krijg na verzenden van de mail een nieuwe pagina in FF met daarin, zie screenshot.
Mail is NIET aangekomen bij mij. (de info@ mail van de website wordt doorgestuurd naar mijn email)

Hoe nu verder?
Heb overigens nog niets gehoord van het bedrijf.
 
Laatst bewerkt door een moderator:
Gebaseerd op Bron's code, en op het voorbeeld van PHPmailer zelf kan je dit eens proberen:

PHP:
<?php
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
etc
}
?>

Oké, deze als contact.php gezet.
Nu heb ik weer een test gedaan, HOERA!
Mail komt binnen!

Code:
Pad naar PHPmailer is: /.../.../domains/example.nl/public_html/test/PHPMailer/src2021-08-31 13:15:56 SERVER -> CLIENT: 220 smtp ESMTP ready
2021-08-31 13:15:56 CLIENT -> SERVER: EHLO test.example.nl
2021-08-31 13:15:56 SERVER -> CLIENT: 250-smtp250 AUTH PLAIN LOGIN
2021-08-31 13:15:56 CLIENT -> SERVER: AUTH LOGIN
2021-08-31 13:15:56 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2021-08-31 13:15:56 CLIENT -> SERVER: [credentials hidden]
2021-08-31 13:15:56 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2021-08-31 13:15:56 CLIENT -> SERVER: [credentials hidden]
2021-08-31 13:15:56 SERVER -> CLIENT: 235 2.0.0 OK
2021-08-31 13:15:56 CLIENT -> SERVER: MAIL FROM:<info@example.nl>
2021-08-31 13:15:56 SERVER -> CLIENT: 250 OK
2021-08-31 13:15:56 CLIENT -> SERVER: RCPT TO:<info@example.nl>
2021-08-31 13:15:56 SERVER -> CLIENT: 250 Accepted
2021-08-31 13:15:56 CLIENT -> SERVER: DATA
2021-08-31 13:15:56 SERVER -> CLIENT: 354 Enter message, ending with "." on a line by itself
2021-08-31 13:15:56 CLIENT -> SERVER: Date: Tue, 31 Aug 2021 15:15:56 +0200
2021-08-31 13:15:56 CLIENT -> SERVER: To: John Doe <info@example.nl>
2021-08-31 13:15:56 CLIENT -> SERVER: From: Mijn Bedrijf <info@example.nl>
2021-08-31 13:15:56 CLIENT -> SERVER: Reply-To: First Last <info@example.nl>
2021-08-31 13:15:56 CLIENT -> SERVER: Subject: PHPMailer SMTP test
2021-08-31 13:15:56 CLIENT -> SERVER: Message-ID: <YblN0...AGOOvea202UiVXnW2Ok@test.example.nl>
2021-08-31 13:15:56 CLIENT -> SERVER: X-Mailer: PHPMailer 6.5.1 (https://github.com/PHPMailer/PHPMailer)
2021-08-31 13:15:56 CLIENT -> SERVER: MIME-Version: 1.0
2021-08-31 13:15:56 CLIENT -> SERVER: Content-Type: text/plain; charset=iso-8859-1
2021-08-31 13:15:56 CLIENT -> SERVER:
2021-08-31 13:15:56 CLIENT -> SERVER: Dit is een test e-mail vanuit PHPmailer.
2021-08-31 13:15:56 CLIENT -> SERVER:
2021-08-31 13:15:56 CLIENT -> SERVER: .
2021-08-31 13:15:56 SERVER -> CLIENT: 250 OK id=1mL3cN-007OUs-EA
2021-08-31 13:15:56 CLIENT -> SERVER: QUIT
2021-08-31 13:15:56 SERVER -> CLIENT: 221 blah.hostserver.nl closing connection
Message sent!

en in mijn mailbox: zoie screenshot.

Nu zijn we al een stukje verder.
en hoe gaat het nu nog verder?
 
Laatst bewerkt door een moderator:
Die debug kan je weer op 0 zetten.
Nu kan je proberen om het formulier eraan te koppelen door de $_POST waardes te gebruiken in de functies van je script, en dan ben je weer een stap verder.

Klein opzetje (lees de gele commentaar-blokken):
PHP:
<?php
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// hier wordt gecontroleerd of het script wordt aangeroepen via een formulier met als method POST.
if($_SERVER['REQUEST_METHOD'] == "POST") {
   // Hier je code van PHPmailer
   // Korte uitleg:
   // Met $_POST['naam'] haal je bijv. de invoer van bijv. <input type="text" name="naam"> op.
}
?>
 
Laatst bewerkt:
nou, ik heb het opgezocht en zo, maar ik word er zo moe van. Ik weet niet wat te doen en als ik wat doe dan komt er weer geen mail binnen.
Sorry.

wat ik wel gevonden heb is 1 bestand met alles.
Maar kan ik die wel gebruiken aangezien de website al in html is?
(wel aanpassen aan mijn info die nodig is)

PHP:
 <?php

function validate()
{
    global $error; // we gebruiken de $error van de 'global space' anders zou deze variabele bij het verlaten van de functie niet meer in het geheugen aanwezig zijn

    if(strlen($_POST['naam']) < 2) { // als de voornaam korter is als twee karakters
        $error = 'Vul aub uw naam in!';
        return FALSE;  // verlaat de functie en geef een FALSE terug
    }

    if(strlen($_POST['e-mail']) < 6) { // als het e-mailadres korter is als zes karakters
        $error = 'Vul aub uw e-mail adres in!';
        return FALSE;  // verlaat de functie en geef een FALSE terug
    }

    if(strlen($_POST['bericht']) < 9) { // als het bericht korter is als negen karakters
        $error = 'Uw bericht is te kort. Uw bericht moet minstens 10 karakters bevatten. ';
        return FALSE;  // verlaat de functie en geef een FALSE terug
    }

    return TRUE; // uiteindelijk als er geen fouten gevonden zijn geven we een TRUE terug
}

function sendMail($voornaam, $achternaam, $email, $bericht, $nieuwsbericht)
{
    // HEADERS
    $headers = "From: $email\n ".$voornaam." <".$achternaam.">\r\n"; // de afzender
    $headers .= "Reply-To: $email ($voornaam)\r\n";
    $headers .= "Return-Path: $email ($voornaam)\r\n";
    // headers voor html-mail:
    $headers .= "MIME-version: 1.0\r\n"; // geeft aan dat het bericht gebruik maakt van de Multipurpose Internet Mail Extensions (MIME). Staat toe HTML in emailberichten te gebruiken.
    $headers .= "content-type: text/html;charset=utf-8\r\n"; // geeft aan dat de inhoud een combinatie van tekst en HTML is en geeft tevens aan welke karakterset is gebruikt.
    // overige mail-gerelateerde zaken
    $naar = 'info@example.nl'; // Waar moet het naartoe?
    $onderwerp = 'Contactformulier via website'; // Het onderwerp van het bericht

    // Verstuur de e-mail
    return  mail($naar, $onderwerp, $bericht, $headers);
}

// initialisatie van de variabelen
$error = '';
$naam = '';
$email = '';
$bericht = '';

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // Invoer uit het contactformulier
    $naam = $_POST['naam']; // overschrijf de waarde van de variabele $voornaam
    $email = $_POST['email']; // overschrijf de waarde van de variabele $email
    $bericht = $_POST['bericht']; // overschrijf de waarde van de variabele $bericht

    if(validate()) // we roepen onze functie validate aan en kijken of we een TRUE of FALSE terugkrijgen.
    {
        if(sendMail($naam, $email, $bericht,) {
            // nu naar een andere pagina sturen
            header('Location: bedankt.php');
        } else {
            echo 'Het bericht kon helaas niet verzonden worden.';
        }
        exit;
     }
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<form method="post" action="">

       <div id="error">
            <?php echo $error; ?>
       </div>

           <div class="form-row">
                <label for="voornaam">Je voornaam *</label>
                <input type="text" id="voornaam" name="voornaam" value="<?php echo $voornaam; ?>" />
           </div>
<br>          
           <div class="form-row">
                <label for="achternaam">Je achternaam *</label>
                <input type="text" id="achternaam" name="achternaam" value="<?php echo $achternaam; ?>" />
           </div>
<br>          
        <div class="form-row">
                <label for="email">Je e-mail adres *</label>
                <input type="text" id="email" name="email" value="<?php echo $email; ?>" />
           </div>
<br>          
           <div class="form-row">
                <label for="bericht">Je bericht *</label>
                <textarea cols="50" rows="12" name="bericht" wrap="virtual" value="<?php echo $bericht; ?>" ></textarea>
           </div>
<br>
           <div class="form-row">
                <input type="checkbox" id="newsletter" name="newsletter" value="1" <?php if($nieuwsbericht) echo 'checked="checked"'; ?> />
                <label for="newsletter">Ja, ik ontvang graag de nieuwsbrief</label>
           </div>

            <div class="form-row">
                <input type="submit" name="verzendenknop" value="Verzenden" />
            </div>

  <p>Alle velden gemarkeerd met een * zijn verplicht.</p>
<br>
<br>
</form>


</body>
</html>
 
Laatst bewerkt door een moderator:
Ik word er eerlijk gezegd ook een beetje moe van dat ik advies geef terwijl jij een hele andere weg inslaat. :(

Want waarom schuif je nu opeens het oh zo toffe en flexibele PHPmailer aan de kant, om nu de lastig te debuggen mail-functie te gebruiken? Ik zou zeggen: Luister en lees eens wat anderen zeggen en ga niet op de automatische piloot verder. Dat gaat écht niet werken en is voor medehelpers zeer hinderlijk!

Geef maar een gil als je op dezelfde lijn ligt en dit topic goed gelezen hebt.
 
Laatst bewerkt:
Ik word er eerlijk gezegd ook een beetje moe van dat ik advies geef terwijl jij een hele andere weg inslaat.
Dat begrijp ik.
Maar ik probeer mij in te lezen, ook op internet maar ik snap het gewoonweg niet.
Dat is het!

Nu kan je proberen om het formulier eraan te koppelen door de $_POST waardes te gebruiken in de functies van je script, en dan ben je weer een stap verder.
Ik begrijp dit al niet.....dus hoe moet ik het dan verder doen?

Ik baal er zo van dat ik het niet begrijp! Dat is al dat ik denk, jeetje meid......of je gaat achteruit met je lezen en begrijpen of het pakt me gewoonweg niet.

Sorry, ik ga die andere topic ook nog eens opzoeken waar het mij na 9 bladzijdes wel was gelukt. 9 en we zitten nu pas op 3. :(
 
Lees om te beginnen eens de gele commentaren in het script van 31 augustus 2021, 17:55, daar staat een mooi voorbeeld over $_POST['......'] variabelen en de invoervelden van het formulier. De code waarmee je kon mailen via PHPmailer heb je ook. Dus het is een kwestie van kopiëren en plakken, en je $_POST waarden erin zetten. Daar hoef je echt geen ander script voor te zoeken, enkel kennis en informatie!

Zo kan je altijd even wat meer kennis verdiepen via W3Schools bijv.
Maar ga niet zelf andere script zoeken zonder te weten wat dat doet. Want dan sla je de de verkeerde weg in.
 
Laatst bewerkt:
Heb je bij deze settings een bestaand emailadres van het domein gebruikt.
Bij de meeste providers is $mail->Username hetzelfde emailadres als $mail->setFrom
PHP:
//SMTP Authenticatie
$mail->Username = '_____@_____.nl';
$mail->Password = '_____';
 
// E-mail instellingen
$mail->setFrom('_____@_____.nl', 'Mijn Bedrijf');
 
Heb je bij deze settings een bestaand emailadres van het domein gebruikt.
Bij de meeste providers is $mail->Username hetzelfde emailadres als $mail->setFrom
PHP:
//SMTP Authenticatie
$mail->Username = '_____@_____.nl';
$mail->Password = '_____';
 
// E-mail instellingen
$mail->setFrom('_____@_____.nl', 'Mijn Bedrijf');

Zo te zien was ze gisteren op een totaal ander script overgegaan. Ik vermoed uit pure wanhoop, wat nergens voor nodig is. :)
Ik hoop dat ze nu haar werkende PHPmailer script kan integreren in mijn voorbeeld-code en begrijpt hoe $_POST werkt.
Ik denk dat het haar wel zal lukken, als ze goed leest.
 
Zo te zien was ze gisteren op een totaal ander script overgegaan. Ik vermoed uit pure wanhoop, wat nergens voor nodig is.
Nee, ik kwam men tegen maar niet gebruikt.

Bron, ja alles ingevuld maar dat kan ik uiteraard niet laten zien.
 
Ik zou zeggen, ga eens aan de gang om mijn script verder uit te bouwen met de werkende motor die je tot nu toe hebt. Dan komt de 'carrosserie' en de 'validatie-controlefuncties' wel daarna.
 
Die debug kan je weer op 0 zetten.
Nu kan je proberen om het formulier eraan te koppelen door de $_POST waardes te gebruiken in de functies van je script, en dan ben je weer een stap verder.

Klein opzetje (lees de gele commentaar-blokken):
PHP:
<?php
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// hier wordt gecontroleerd of het script wordt aangeroepen via een formulier met als method POST.
if($_SERVER['REQUEST_METHOD'] == "POST") {
   // Hier je code van PHPmailer
   // Korte uitleg:
   // Met $_POST['naam'] haal je bijv. de invoer van bijv. <input type="text" name="naam"> op.
}
?>

PHP:
if (array_key_exists('contact_name', $_POST) && array_key_exists('contact_message', $_POST)) {
                
        if ($mail->addReplyTo($_POST['contact_email'], $_POST['contact_name'])) {
            
            $mail->Subject = 'Contact website';
 
            $message  = '<div>Naam: '    . $_POST['contact_name']    . '</div>';
            $message .= '<div>Email: '   . $_POST['contact_email']   . '</div>';
            $message .= '<div>Bericht: ' . $_POST['contact_message'] . '</div>';

Dit werkt niet, krijg ook geen foutmelding.
En een lege pagina en geen mail.

Ik denk dat ik de handdoek in de ring gooi. Ik heb het wel gehad.
 
Kopieer je nou enkel die code van Bron in mijn voorbeeld??

Kijk eens goed naar mijn advies anders, zonder de recente code van Bron uit de bijlage, voor de duidelijkheid.

De motor die werkt, heb je al. Dus bouw die eens in, in mijn voorbeeld.

Stapje voor stapje moet toch wel lukken? Dat is juist makkelijk te debuggen. Zet error-logging uiteraard ook aan. Zonder dat wordt het lastig debuggen.
Succes! ;)

Laat anders eens zien wat je nu precies aan code hebt.
 
Laatst bewerkt:
Ik heb even een uitgebreider script gemaakt. Deze zal echt wel moeten werken.
Vul wel even de lege velden in met je eigen mailadressen, hostname en authenticatie.

Zet eventueel de debug op 2 als het niet werkt.

PHP:
<?php
// Foutafhandeling van PHP aanzetten. In productie deze onderste twee lijnen commentariseren met een // ervoor.
error_reporting(E_ALL);
ini_set('display_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") {

    //Create a new PHPMailer instance
    $mail = new PHPMailer();

    //Tell PHPMailer to use SMTP
    $mail->isSMTP();

    $mail->SMTPDebug = 0; // Debugging voor SMTP. 0 = uit, of 1,2 of 3 voor hogere debugging. 2 is gangbaar bij testen.
    $mail->Host = '_______'; // 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 = '_____@_____.nl'; // emailadres of emailnaam of emailcode ofzo
    $mail->Password = '_____';

    // E-mail instellingen
    $mail->setFrom('_____@_____.nl', 'Mijn Bedrijf'); // 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($_POST['contact_email'], $_POST['contact_name']); // Stel hier de geadresseeerde in
    $mail->Subject = 'Bericht vanaf de contactpagina'; // 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';
    }

}
?>
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan