htm bestand ook ezen als er phpi n staat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Georg Kellersmann

Georg Kellersmann

22/03/2015 14:21:16
Quote Anchor link
Is het mogelijk dat PHPMailer een html bestand behandeld als er php code in 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?
 
PHP hulp

PHP hulp

03/12/2024 18:14:28
 
Aad B

Aad B

22/03/2015 14:24:12
Quote Anchor link
Volgens mij moet nog steeds je html bestand .php benoemen en geen .html
Voor de bestaande html IN het bestand maakt het niks uit.
Gewijzigd op 22/03/2015 14:27:53 door Aad B
 
Georg Kellersmann

Georg Kellersmann

22/03/2015 14:32:45
Quote Anchor link
Dat heb ik ook geprobeerd, maar als er in de MsgHTML
brief.php staat ipv Brief.php dan wordt dat bestand niet verwerkt en blijft de body van het bericht leeg.
 
- SanThe -

- SanThe -

22/03/2015 14:37:19
Quote Anchor link
Lijkt mij logisch, want dat zijn twee verschillende bestandsnamen.
 
Aad B

Aad B

22/03/2015 14:38:33
Quote Anchor link
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?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 14:51:35
Quote Anchor link
brief.html is gewoon goed want met de functie file_get_contents() lees je de inhoud van dat bestand in een php variabele en wordt het sowieso gezien als tekst. Maar heb je error_reporting wel aanstaan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
?>
 
Georg Kellersmann

Georg Kellersmann

22/03/2015 14:51:38
Quote Anchor link
Jazeker.
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 14:57:11
Quote Anchor link
Dat klopt. Wat wil je bereiken? Ik denk dat je wat variabelen wilt gebruiken in je template?

Je moet dat zelf met PHP oplossen.

Zal een klein voorbeeldje geven...
Gewijzigd op 22/03/2015 14:58:24 door Frank Nietbelangrijk
 
Thomas van den Heuvel

Thomas van den Heuvel

22/03/2015 14:59:04
Quote Anchor link
Uhm, met file_get_contents() krijg je de broncode van het opgevraagde bestand. De code in 'brief.php' of wat dan ook zal waarschijnlijk niet uitgevoerd worden.

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?)?
 
Georg Kellersmann

Georg Kellersmann

22/03/2015 15:00:02
Quote Anchor link
@SanThe
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.
 
- SanThe -

- SanThe -

22/03/2015 15:04:04
Quote Anchor link
Georg Kellersmann op 22/03/2015 14:32:45:
... brief.php ipv Brief.php ...


Je had het over php-bestanden met/zonder hoofdletter.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 15:08:37
Quote Anchor link
Stel je hebt dit template bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<html>
    <body>
        uw naam is: #USERNAME
    </body>
</html>


dan moet je dat bestand inlezen in php en str_replace() gebruiken om #USERNAME voor een andere waarde te vervangen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);

?>
Gewijzigd op 22/03/2015 16:32:50 door Frank Nietbelangrijk
 
Georg Kellersmann

Georg Kellersmann

22/03/2015 15:13:22
Quote Anchor link
@Frank N
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/03/2015 15:40:22
Quote Anchor link
Ik denk dat je ook veel gerichtere meldingen terugkrijgt van fouten indien je dingen in een try-catch blok zet.

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 15:58:30
Quote Anchor link
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.


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.
 
Georg Kellersmann

Georg Kellersmann

22/03/2015 15:58:53
Quote Anchor link
@Thomas
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 16:09:23
Quote Anchor link
Ah.. die #USERNAME is een variabele.

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
    <body>
        <h1>Er is een contactverzoek ingevuld</h1>
    <p>De volgende gegevens zijn ingevuld:
        <ul>
            <li>#NAME</li>
            <li>#EMAIL</li>
            <li>#SUBJECT</li>
        </ul>
    </p>
    <p>Hieronder volgt het bericht:<br>
    #MESSAGE</p>
    </body>
</html>
 
Thomas van den Heuvel

Thomas van den Heuvel

22/03/2015 16:10:18
Quote Anchor link
MsgHTML accepteert een string (een reeks karakters), niet een bestand. Het bestand haal je op met file_get_contents() - deze laatste functie retourneert een string. Die je dus vervolgens rechtstreeks voert aan MsgHTML().

Dat is letterlijk wat je in je bovenstaande code doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$mail
->MsgHTML(file_get_contents('brief.php'));
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 16:15:50
Quote Anchor link
In ieder geval kun je geen PHP code uitvoeren in een bestand die je met file_get_contents() ophaalt.
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
 
Georg Kellersmann

Georg Kellersmann

22/03/2015 16:34:34
Quote Anchor link
@Thomas
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/03/2015 16:37:35
Quote Anchor link
Georg,

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
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.