PHP in PHP mail functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lorenzho Dealorde

Lorenzho Dealorde

18/07/2018 16:02:21
Quote Anchor link
Is het volgende mogelijk?

Ik zou graag willen dat mijn email subs hun email adres te zien krijgen als ze een mail van ons krijgen.
Maar ik krijg een white space te zien als ik het script uitvoer.
Ik verzend het met Mime versie 1.0, Content type text/html en Charset is iso-8859-1.
En gebruik zoals altijd een flat file database.

Output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Dear ,
rest van de content


php code:
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
16
17
18
19
20
21
22
23
24
25
    $message = '

    <html>
    <head>
    <title></title>
    </head>
    <body>
        <p>Dear <?php echo ($email);?>, </p>
        <p>rest van de content</p>
    </body>
    </html>

    ';



    $emails = file('MUgWgJJE9m7FHh4TFrLHf6YzE.txt', FILE_IGNORE_NEW_LINES);
    $x = 1;
    foreach ($emails as $email) {
        $mail_sent = @mail($email, $subject, $message, $headers, '-f [email protected]');
        echo $mail_sent ?
        $x . '. Mail send to: ' . $email . ' | ' . '<b><font color=green> Successfully Sended!</font><font color=lime> &check; </font></b>' . '<br/>' :
        $x . '. Mail send to: ' . $email . ' | ' . '<b><font color=red> Error 02931: Contact To Fix Issue</font></b>' . '<br/>';
        $x++;
    }


Wat doe ik verkeerd en hoe fix ik dit?
Gewijzigd op 18/07/2018 16:10:43 door Lorenzho Dealorde
 
PHP hulp

PHP hulp

21/11/2024 22:44:09
 
- Ariën  -
Beheerder

- Ariën -

18/07/2018 16:11:51
Quote Anchor link
Je gebruikt nu PHP-tags op lijn 8 terwijl je al in PHP werkt. Je kan immers ook geen huis in een huis bouwen ;-)

Je kan dus gewoon in je string die in je $message zit gewoon je variabele gebruiken.

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
16
<?php // deze regels staat er even bij voor de kleurtjes:
$message = '

    <html>
    <head>
    <title></title>
    </head>
    <body>
        <p>Dear '
.$email.', </p>
        <p>rest van de content</p>
    </body>
    </html>

    '
;
// hieronder sluit ik PHP even af.
?>
Gewijzigd op 18/07/2018 16:12:41 door - Ariën -
 
Lorenzho Dealorde

Lorenzho Dealorde

18/07/2018 16:22:26
Quote Anchor link
haha
Quote:
Je kan immers ook geen huis in een huis bouwen ;-)

Ik begrijp het, dacht omdat het in een nieuw html tag zat dat ik dan opnieuw php tags moest gebruiken :P.

bedankt voor de uitleg. test gedaan en werk super nu.
Gewijzigd op 18/07/2018 16:26:24 door Lorenzho Dealorde
 
- Ariën  -
Beheerder

- Ariën -

18/07/2018 17:08:11
Quote Anchor link
Mooi zo :-)
 
Thomas van den Heuvel

Thomas van den Heuvel

18/07/2018 19:04:09
Quote Anchor link
Err, gebruik bij voorkeur output buffering zodat je geen compleet statische lappen tekst in een string hoeft te duwen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ob_start(); // vang alle output op
?>
<html>
<head>
<title></title>
</head>
<body>
<p>Dear<?php echo $htmlSafeName; ?>,</p>
<p>rest van de content</p>
</body>
</html><?php
$mailBody
= ob_get_clean(); // schrijf het resultaat weg naar $mailBody
?>

Daarnaast, je werkt hier nog steeds in de HTML context, OUTPUT dient dus zodanig ge-escaped te worden dat deze onschadelijk is binnen de genoemde context, $htmlSafeName zou dus HTML-safe gemaakt moeten worden, bijvoorbeeld door htmlspecialchars() toe te passen op de username. Je wilt namelijk iemand geen javascript exploit of wat dan ook mailen.

En dan zou je ook nog voor een flat file / template aanpak kunnen kiezen met placeholders, bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<html>
<head>
<title></title>
</head>
<body>
<p>Dear [name],</p>
<p>rest van de content</p>
</body>
</html>

Waarbij je [name] met (HTML-safe) equivalenten vervangt via str_replace() bij het afdraaien van de foreach-loop.
Gewijzigd op 18/07/2018 19:05:57 door Thomas van den Heuvel
 
Lorenzho Dealorde

Lorenzho Dealorde

18/07/2018 19:07:08
Quote Anchor link
Te snel gezegt dat het werkt.. Excusses


Ik krijg nog steeds white space i.p.v. het email adres van mijn client.
En een error
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Notice: Undefined variable: email in



Mijn hele code
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    <?php
    // Turn off output buffering
    ini_set('output_buffering', 'on');
    // Turn off PHP output compression
    ini_set('zlib.output_compression', false);
            
    //Flush (send) the output buffer and turn off output buffering
    //ob_end_flush();

    while (@ob_end_flush());
            
    // Implicitly flush the buffer(s)
    ini_set('implicit_flush', true);
    ob_implicit_flush(true);
    
    flush();
    
    /// Now start the program output

    $subject = 'Subject hier';
    $headers = "From: Bedrijfnaam <[email protected]>\n" .
             "Reply-To: Bedrijfnaam <[email protected]>\n" .
             "MIME-Version: 1.0\n" . "Content-Type: text/html; charset=iso-8859-1";
            
    
    $message = '

    <html>
    <head>
    <title></title>
    </head>
    <body>
        <p>Dear '
.$email.', </p>
        <p>rest van de content</p>
    </body>
    </html>

    '
;

    $emails = file('MUgWgJJE9m7FHh4TFrLHf6YzE.txt', FILE_IGNORE_NEW_LINES);
    $x = 1;
    foreach ($emails as $email) {
        $mail_sent = @mail($email, $subject, $message, $headers, '-f [email protected]');
        echo $mail_sent ?
        $x . '. Mail send to: ' . $email . ' | ' . '<b><font color=green> Successfully Sended!</font><font color=lime> &check; </font></b>' . '<br/>' :
        $x . '. Mail send to: ' . $email . ' | ' . '<b><font color=red> Error 02931: Contact To Fix Issue</font></b>' . '<br/>';
        $x++;
        
    }

    
    ob_end_flush();
    ?>
Gewijzigd op 18/07/2018 19:24:30 door Lorenzho Dealorde
 
Thomas van den Heuvel

Thomas van den Heuvel

18/07/2018 19:25:12
Quote Anchor link
Het bovenstaande script produceert geen HTML-document/output. Het doel van dit script is het bouwen van HTML-mailtjes lijkt mij. Output buffering kun je op verschillende manieren inzetten, in het bovenstaande script ben je dingen door elkaar aan het gooien.

Het enige wat je hoeft te bufferen is de HTML-tekst die je op wilt vangen om in een mailtje te zetten. Hiertoe zet je expliciet de buffering aan met ob_start() en beëindig je deze / vang je deze op met ob_get_clean(). Meer hoef je niet te doen.

En als je deze wilt personaliseren, zal de inhoud die per mail verschilt in elke stap van de foreach-mail ingesteld moeten worden. Nu staat $email (die van regel 32) nergens ingesteld? En deze verschilt ook niet per verzonden bericht (en wordt ook overschreven in regel 41).
 
Lorenzho Dealorde

Lorenzho Dealorde

18/07/2018 20:31:58
Quote Anchor link
Nu krijg ik alleen de onderste email address te zien van mijn lijst..

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
16
17
18
    $address= file('MUgWgJJE9m7FHh4TFrLHf6YzE.txt', FILE_IGNORE_NEW_LINES);
    foreach ($address as $clientmail) {
        
    }

    $message = '

    <html>
    <head>
    <title></title>
    </head>
    <body>
        <p>Dear '.$clientmail.', </p>
        <p>rest van de content</p>
    </body>
    </html>

    ';
Gewijzigd op 18/07/2018 20:34:38 door Lorenzho Dealorde
 
- Ariën  -
Beheerder

- Ariën -

18/07/2018 20:37:14
Quote Anchor link
Je hebt een lege foreach ;-)

Dat doet inderdaad niks, nada en noppes.
 
Lorenzho Dealorde

Lorenzho Dealorde

18/07/2018 20:56:24
Quote Anchor link
Als ik het volgende tussen me foreach zet dan krijg ik als nog de onderste email address te zien van mijn lijst.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mail_sent = @mail($clientmail);
Gewijzigd op 18/07/2018 20:57:00 door Lorenzho Dealorde
 
Thomas van den Heuvel

Thomas van den Heuvel

18/07/2018 21:04:14
Quote Anchor link
Begin eens simpel.

Deel het probleem eens op in stukken.

Introduceer hulpfuncties die dit opsplitst in deeltaken.

Laat voor nu het hele e-mail gedoe achterwege want dit compliceert de boel alleen maar.

Bijvoorbeeld als volgt:
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
// https://www.phphulp.nl/php/forum/topic/php-in-php-mail-functie/102301
// voor ontwikkeling

error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
ini_set('display_startup_errors', true);

function
escape($in) {
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}


// maak template, even met beperkte HTML
ob_start();
    ?>
<p>Hello [name],</p>
    <p>How does today find you?</p>
    <p>Greetings,</p>
    <p>[signature]</p><?php
$template
= ob_get_clean();

// voor het invullen van de vakjes op een veilige manier
function assign($template, $vars) {
    $copy = $template;
    foreach ($vars as $key => $value) {
        $copy = str_replace('['.$key.']', escape($value), $copy);
    }

    return $copy;
}


// test cases
$data = array(
    array(
        'name'      => '<b>evil html</b>',
        'signature' => 'BOfH',
    ),

    array(
        'name'      => 'World',
        'signature' => 'Hennie',
    ),

    // et cetera
);

// test output
foreach ($data as $row) {
    $copy = assign($template, $row);

    echo $copy;
    echo '<hr>';
}

?>
[end]
 



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.