Beste leden,


Graag had ik wat advies van jullie over het volgende.
Via een formulier wil ik een email kunnen sturen met een vaste opmaak (template).
In het formulier word gebruik gemaakt van een input email adres (waar de email naar toe moet) en nog een variabele waarde die terug moet komen in de template. Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.

Het formulier en de ajax call functie heb ik volledig af en wil nu graag weten wat nu de handigste afhandeling is.

Met vriendelijke groet,

Jop
declaratie van lokale variabelen +
output buffering +
include(_once()) van template waarin variabelen worden verwerkt?

Vervolgens zou je simpelweg met mail() + enige headers je mail kunnen versturen, of je maakt gebruik van PHPMailer als je dat leuk vindt.

Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.

Dit staat verder los van enige werkwijze die je gebruikt. Vang de returnwaarde van mail() op in een variabele, of van de send() methode indien je PHPMailer gebruikt.
<?php
$var = 'Jouw variabele';

$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn

if(FALSE === $content)
{
throw new Exception('Template not found.');
}

// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("%VAR%", $var, $content);

// verzend de email
mail($to, $subject, $content);
?>

mytemplate.txt:

Hartelijk dank voor uw aanvraag

de waarde van de variabele is: %VAR%

Met vriendelijke groet,
PHPHULP
Bedankt voor de reactie's.

Dit is wat ik nu heb


<form id="forma" method="post" action="formmailer.php">
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="Fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>




<?php
session_start(); 
//init variables
$emailcustomer = "";

$choise ="";
$to = "";
$subject = "";


//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 

//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_post['choise'];


$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn 

if(FALSE === $content)
{
    throw new Exception('Template not found.');
}

// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("$choise", $var, $content);

$to = "$emailcustomer";
$subject = "Uw voorkeur";
$headers = 'From: [email protected]';



// verzend de email
mail($headers, $to, $subject, $content);



}
?>


Hebben jullie nog tips ?
Heb de php code aangepast, diversen malen getest alleen werkt het nog niet. Waar kan dit aan liggen.


<form id="forma" method="post">
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>

<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();

$.ajax({
	type: "POST",
        'url': 'formmailer.php',
	'success': function(return) {
	alert (return);
});
});
});

</script>



<?php
session_start(); 
//init variables
$emailcustomer = "";
$emailus = "";
$choise ="";
$to = "";
$subject = "";


//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 

//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_POST['choise'];


$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn 

if(FALSE === $content)
{
    throw new Exception('Template not found.');
}

// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace($choise, $var, $content);

$to = $emailcustomer;
$subject = "Uw voorkeur";
$headers = 'From: [email protected]';


// verzend de email
mail($to, $subject, $content, $headers);

$return = "Mail succesvol verstuurd";

}
?>
@Jop B je geeft nergens data door met je AJAX call, wellicht als je de parameter
'data': $('#forma').serialize(),

toevoegt na de 'url': ... regel?

Ook retourneert je script niets, er staat enkel:
<?php
$return = "Mail succesvol verstuurd";
?>

Je zou ook JSON kunnen retourneren met een status (true of false) die aangeeft of het versturen van de mail is geslaagd:
<?php
$success = mail(...);

header('Content-Type: application/json; charset=UTF-8');
echo json_encode($success);
?>

(en anders retourneer je standaard false op eenzelfde wijze)

Ook kun je in je AJAX-request aangeven wat voor type data je terugverwacht, in dit geval dus JSON. Hiertoe kun je de volgende regel ook nog toevoegen aan je JavaScript:
'dataType': 'json',
Beste Thomas,


Dank voor het meedenken :) even los van de return melding, op een of andere manier zend hij geen mail naar het opgegeven email adres.

De parameter zoals je boven aangaf heb ik bij de ajax call gezet.
op een of andere manier zend hij geen mail naar het opgegeven email adres.

Hm :/.

Waar blijkt dit uit? Retourneert mail() false? Of krijg je niets binnen?

Succesvol verzenden staat niet garant voor succesvol ontvangen (net zoals de reguliere post :)).

Je zult eerst even precies moeten uitzoeken waar het schip nu strandt.

Maak anders eens een heel simpel/plat script die simpelweg een test-onderwerp en test-bericht mailt naar een statisch e-mailadres en kijk vanuit daar verder wat er misgaat. Maak voor jezelf alles inzichtelijk door een en ander op het scherm af te drukken. Overweeg om in eerste instantie de extra abstractie middels AJAX achterwege te laten, je bent dan in feite een beetje "blind" aan het ontwikkelen en dat is niet handig als je niet precies weet waar iets misgaat (EDIT: dit had ik deels ondervangen door het retourneren van de statuscode die aangaf of het mailen was geslaagd)
Beste Thomas,

Bedankt voor de tip. Heb een functie gemaakt die ik kan uitvoeren en zo stap voor stap dingen erbij kan zetten.

Nu zit ik nog met een probleem en dat is dat mijn template (HTML) als tekst word weergegeven.
Mijn template heb ik nog simpel gehouden door alleen de achtergrond een kleur te geven.

Nu zie ik op diversen sites staan dat ze een html toevoegen door dit te doen:


<?php
$message = '<html><body>en de inhoud</body></html>';

?>


Maar het moet toch ook kunnen om een html file in te voegen zoals Frank dat boven beschreef?

Reageren