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:

Dear ,
rest van de content


php code:

	$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?
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 // 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.
?>
haha
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.
Mooi zo :-)
Err, gebruik bij voorkeur output buffering zodat je geen compleet statische lappen tekst in een string hoeft te duwen:
<?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:
<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.
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

Notice: Undefined variable: email in



Mijn hele code

	<?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();
	?>
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).
Nu krijg ik alleen de onderste email address te zien van mijn lijst..


    $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>

    ';
Je hebt een lege foreach ;-)

Dat doet inderdaad niks, nada en noppes.
Als ik het volgende tussen me foreach zet dan krijg ik als nog de onderste email address te zien van mijn lijst.

$mail_sent = @mail($clientmail);


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:
<?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]

Reageren