htm bestand ook ezen als er phpi n staat
ALS er in de code
(code) php
$mail->MsgHTML (file_get_contents('brief.php');
?>
staat en niet
(code)php
$mail->MsgHTML (file_get_contents('brief.htm');
?>
dan blijft de body leeg en wordt er niets verzonden.
Nu meen ik ergens te hebben gelezen dat er een mogelijkheid is
om PHPMailer een opdracht te geven dat php code gelezen
moet worden ook als de extension htm is htm
maar dat kan ik niet meer vinden.
Iemand die dit weet?
Voor de bestaande html IN het bestand maakt het niks uit.
Gewijzigd op 22/03/2015 14:27:53 door Aad B
brief.php staat ipv Brief.php dan wordt dat bestand niet verwerkt en blijft de body van het bericht leeg.
Lijkt mij logisch, want dat zijn twee verschillende bestandsnamen.
AH, op die wijze. In principe moet dan toch wel html kunnen maar dat hangt er dan vanaf wat de functie MsgHTML() precies doet. Is MsgHTML() een phpmailer functie?
in MsgHTML(file_get_contents() wordt de body opgeborgen, maar dat moet dan wel html zijn.
Als er php in dat HTML bestand staat wordt die niet verwerkt, maar blijft er de php code staan.
Toevoeging op 22/03/2015 14:56:24:
@Frank Nietbelangrijk
Ik heb het uitgeprobeerd op de server van de webhost.
brief.htm met dezelfde inhoud als brief.php behalve dus een paar stukjes php code, komt niet in het bercht dat wordt verzonden. Dan komt er wel een mededeling bericht kon niet worden verzonden. En dat heb ik in het mailformulier staan voor het geval verzenden is misluktt.
Je moet dat zelf met PHP oplossen.
Zal een klein voorbeeldje geven...
Gewijzigd op 22/03/2015 14:58:24 door Frank Nietbelangrijk
Bevat brief.php een soort van mail-template waarin "placeholders" worden vervangen door waarden ofzo?
Er staat wel dat $message geëvalueerd wordt, wat dat ook moge betekenen.
Ugh, het voorbeeld doet hetzelfde (ook file_get_contents, maar dan van een .htm bestand) maar maakt dit niet veel duidelijker.
Bevat "brief.php" in jouw geval ook een compleet HTML document, inclusief <html> en <body> tags?
Vang je ook fouten op door je mail in een try-catch blok te zetten (kan afhangen van PHPMailer versie, welke gebruikt je?)?
ja natuurlijk brief.htm is niet hetzelfde als brief.php maar daar gaat het niet om.
de mailer leest een bestand met .php niet en met .htm wel.
Alleen er schijnt een manier te zijn dat PHOMailer kan worden gevraagd om voor een beopaald nbestand htm alsphp te leen en dan komt de server dus die php code tegen en verwerkt die wel.
Toevoeging op 22/03/2015 15:01:33:
Sorry ik wilde het te snel doen en maak te veel tikfouten.
Georg Kellersmann op 22/03/2015 14:32:45:
... brief.php ipv Brief.php ...
Je had het over php-bestanden met/zonder hoofdletter.
dan moet je dat bestand inlezen in php en str_replace() gebruiken om #USERNAME voor een andere waarde te vervangen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$username = 'Frank';
$content = file_get_contents('brief.html');
if($content === FALSE) {
echo 'Template bestand kon niet gelezen worden.';
exit;
}
$content = str_replace('#USERNAME', htmlentities($username), $content);
$mail->MsgHTML($content);
?>
$username = 'Frank';
$content = file_get_contents('brief.html');
if($content === FALSE) {
echo 'Template bestand kon niet gelezen worden.';
exit;
}
$content = str_replace('#USERNAME', htmlentities($username), $content);
$mail->MsgHTML($content);
?>
Gewijzigd op 22/03/2015 16:32:50 door Frank Nietbelangrijk
dat ga ik dus proberen. Bedankt
@SanThe
zoals ik al schreef, tikfouten, maar in dit geval niet in de code waarmee ik het heb geprobeerd
Toevoeging op 22/03/2015 15:17:51:
@Frank N
nu begrijp ik toch die zin
dan moet je dat bestand inlezen in php en str_replace() gebruiken om #USERNAME voor een andere waarde te vervangen
niet zo goed.
PHPMailer accepteert op 1 of andere manier de invoer niet / maakt deze leeg, dan kan PHPMailer zelf ook het beste vertellen wat er aan de hand is, lijkt me.
Georg Kellersmann op 22/03/2015 15:13:22:
@Frank N
nu begrijp ik toch die zin
dan moet je dat bestand inlezen in php en str_replace() gebruiken om #USERNAME voor een andere waarde te vervangen
niet zo goed.
nu begrijp ik toch die zin
dan moet je dat bestand inlezen in php en str_replace() gebruiken om #USERNAME voor een andere waarde te vervangen
niet zo goed.
Wel goed! Het is precies waar een template bestand voor bedoelt is. Duidelijk je HTML layout in één bestand. Hele frameworks werken op deze manier.
Een andere approach is om geen template te gebruiken maar je HTML door een PHP functie te laten renderen. Zou alleen niet mijn keuze zijn.
Nou. ik denk dat het zo is:
$mail->MsgHTML vertelt aan PHPMailer dat er een .html bestand verstuurd moet worden als body.
Dan stop ik in die code geen .htm maar een .php bestand. Dan leest PHPMailer dat niet want ik heb net verteld dat het een .htm bestand is. En de server leest ook alleen .php als de extension van een bestand .php is.
Misschien is de methode die Frank N zojuist aangaf wel goed, maar ik snap niet goed wat ik met die #username aan moet.
Stel je hebt een contact formulier en je wilt nadat iemand dat ingevuld heeft een email versturen naar de administrator.
Voor de email gebruik je een template bestand. Echter wil je binnen de HTML van dat bestand wat variabelen kwijt.
Stel het contact formulier heeft de velden naam, email, onderwerp en bericht.
dat zijn vier variabelen die je in de template kwijt wilt:
Dat is letterlijk wat je in je bovenstaande code doet:
Dan zou je include() of require() moeten gebruiken. Of het echter verstandig is.. Ik denk van niet. Het geeft te veel vrijheid aan andere personen -die geen programmeur zijn- om je script de vernieling in te helpen of om je beveiliging om zeep te helpen
Toevoeging op 22/03/2015 16:24:52:
Naast mijn ontzettende simpele voorbeeldje kun je ook een professionele template engine gebruiken zoals bijvoorbeeld twig of blade
Nou en of MsgHTML bestanden accepteert, niet alleen letterljke strings hoor.
Alleen, dat bestand wordt met een function opgehaald omdat het bestand moet worden uitgekozen uit een submap.
Maar dat resulteert (om hetzelfde voorbeeld te gebruiken in brief.htm. En dan komt de conents van brief.htm keurig op mijn scherm.
@Frank
Wat de beveiliging betreft heb je denk ik wel gelijk. Maar ik krijg zelf vaak van zulk soort bestanden als email die (ik schat) in meer dan een miljoenvoud worden verstuurd. B.v van de KLM en dan staat er Beste Georg boven en ook de gegevens uit mijn account. Het kan dus wel, maar vereist meer kennis dan ik daarvan in huis heb.
Thomas heeft gelijk. MsgHTML() accepteert enkel strings. Alleen waar die strings vervolgens vandaan komen maakt geen biet uit.
>> en dan staat er Beste Georg boven en ook de gegevens uit mijn account. Het kan dus wel, maar vereist meer kennis dan ik daarvan in huis heb.
Die methode probeer ik je nou dus uit te leggen aan de hand van mijn voorbeeldjes.
Gewijzigd op 22/03/2015 16:55:08 door Frank Nietbelangrijk