mailen met php
wat heb ik, een Linux machine met apache php en mysql.
functionaliteit:
ik heb een mysql database gevuld met data (inclusief mail adressen)
Ik heb een php script geschreven dat bepaalde data uit de mysql database op zoekt en weer geeft in php. Nu is het de bedoeling dat deze data in html verstuurd word naar e-mail adressen die ik ook uit de database gehaald heb.
Er zijn een aantal php files die ik hiervoor gebruik, te weten:
index.php - hierin kun je een zoekopdracht invoeren
results.php - hier word de connectie met de mysql opgebouwt en de queries uitgevoerd om de gegevens die ik nodig heb te verzamelen. Vanuit results word het verstuurd naar viewmail.php
viewmail.php - in deze file word template.php geinclude en worden gegevens die zijn opgehaald via results.php toegevoegd. je ziet dus een pagina die zo gestuurd kan worden.
mailing.php - hier word de mail verstuurd naar de e-mail adressen die zijn opgehaald via results.php.
Om de informatie door te sturen naar de volgende pagina gebruik ik bv: :
<form name="form" action="results.php"> (of viewmail.php / mailing.php
<input type="submit" name="submit" Value="Send" ><br />
</form>
Het probleem is, dat zodra ik bij mailing.php aankom er 2 dingen niet gebeuren.
de gegevens die zijn gevuld, worden in viewmail.php niet meegenomen.
dit zie ik door in mailing.php include("viewmail.php); te doen
Ik dacht eerst dat ik de variabelen opnieuw moest definieren in een string ($) op de pagina mailing.php, echter heeft dit geen zin. de velden blijven leeg.
het script mailt niet het template dat ik wil.
Ik moet eerlijk zeggen dat ik niet weet hoe ik moet zeggen dat ik niet weet hoe het script viewmail.php moet sturen. M.a.w. hoe defineer ik dit?
mail($to,$subject,$headers,$body); is wat ik voor het mailen gebruik.
Echter mailt het script wel, zoals gezegd word in results.php het mail adres opgehaald, en word gebruikt in het mail script.
wat gemaild word is plain txt dat toegevoegd word via:
$body =" Dit is een Test Bericht ";
hopelijk is het nu duidelijk wat ik wil bereiken.
thx
nathan
Wel vraag ik mij af waarom je zoveel bestanden gebruikt voor maar een paar bewerkingen?
En ik raad je aan om in ieder geval PHPMailer of SwiftMailer te gebruiken voor het versturen van je e-mails.
En hoe ziet je template er precies uit, want je kan bijvoorbeeld via file_get_contents($bestand); een template (bijvoorbeeld html) inladen en bepaalde woorden vervangen door een tekst, bijvoorbeeld:
Template:
<html>
<body>
#tekst#
</body>
</html>
viewmail.php
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$tekst = $_SESSION['tekst']; // Dit zal dan een POST waarde moeten bevatten of zoiets...
$tekst = htmlspecialchars($tekst);
$tekst = nl2br($tekst);
$template = file_get_contents('template.html');
$template = str_replace('#tekst#',$tekst,$template);
?>
$tekst = $_SESSION['tekst']; // Dit zal dan een POST waarde moeten bevatten of zoiets...
$tekst = htmlspecialchars($tekst);
$tekst = nl2br($tekst);
$template = file_get_contents('template.html');
$template = str_replace('#tekst#',$tekst,$template);
?>
Of begrijp ik het nu nog steeds niet?
Gewijzigd op 26/08/2010 17:30:11 door Arjan -
kan ik ook 2 x dit doen?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$template = str_replace('#tekst#',$tekst,$template);
$template = str_replace('#tekst1#',$tekst1,$template);
?>
$template = str_replace('#tekst#',$tekst,$template);
$template = str_replace('#tekst1#',$tekst1,$template);
?>
Ja dat kan.
index.php
results.php
viewmail.php
template.php
mailing.php
Een pagina die je hebt gemaakt cq die getoond wordt in de browser is vluchtig die heb je niet beschikbaar om te versturen. Programmeer je zodanig modulair dat je zoveel bestanden gebruikt dat ze ook voor andere functies gebruikt kunnen worden ?
index.php: is je zoekfunctie, je invulformulier met een "action=results.php"
In results.php zoek je in je database en je toont gegevens die je opgehaald hebt. Zorg dat dat in een of meerdere session-array's staat. Onderin results.php een button verzenden met action=mailing.php die verzend en de gegevsn uit de arrays gebruikt. Kan je hier wat mee ?
als me mail niet goed gaat weet ik dat ik in mailing.php moet zoeken.
Ik hoef op deze manier niet 1 of 2 lange scripts te lezen en sneller problemen kan vinden en oplossen
Hmm, met de juiste instellingen en foutlogging hoef je echt geen 1000 regels te lezen om een fout te vinden. PHP is in staat om het regelnummer weer te geven of te loggen. Je maakt alles alleen maar ingewikkelder met variabelen bewaren en doorgeven. Is je overigens al duidelijk dat een pagina die je hebt gemaakt cq die getoond wordt in de browser is vluchtig die heb je niet ook beschikbaar om te versturen per mail ?
Nathan f op 26/08/2010 17:40:47:
hmm nee thx, dit helpt me wel op weg.
kan ik ook 2 x dit doen?
kan ik ook 2 x dit doen?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$template = str_replace('#tekst#',$tekst,$template);
$template = str_replace('#tekst1#',$tekst1,$template);
?>
$template = str_replace('#tekst#',$tekst,$template);
$template = str_replace('#tekst1#',$tekst1,$template);
?>
mag ('#tekst#'...)
ook een string zijn?
de waarde is namelijk niet steeds hetzelfde.
tuurlijk mag dat, waarom niet :)
ik heb het html bestand in de mailing.php gekopierd en nu werkt het! yay! er word gemaild in html wat ik wil.
echter loop ik nu tegen een nieuw probleem aan (het zal eens niet ;))
het staat nu zo:
echter lukt het me niet een php string op te roepen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$value = $_GET['value'] // bijvoorbeeld
$message = '
<html>
<body>
<?php echo $value; ?>
</body>
</html>
'
?>
$value = $_GET['value'] // bijvoorbeeld
$message = '
<html>
<body>
<?php echo $value; ?>
</body>
</html>
'
?>
ik krijg geen foutmelding. het lijkt er op dat de php code gewoon mee loopt met de html code..
iemand een idee?
thx!
nathan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$value = $_GET['value'] // bijvoorbeeld
$message = '
<html>
<body>
'.$value.'
</body>
</html>
';
?>
$value = $_GET['value'] // bijvoorbeeld
$message = '
<html>
<body>
'.$value.'
</body>
</html>
';
?>
PHP in PHP uitvoeren kan natuurlijk niet, daarom moet je het aan elkaar plakken als je variablen in je tekst wil stoppen (met . ). Dit zou moeten werken.
kijk, thx! nu werkt het! yay! ;)