Вы извлекаете $template
из файла только один раз, но затем пытаетесь заменить его несколько раз. После первой замены она фиксируется данными первого получателя.
Попробуйте назначить замененную строку новой переменной, например, $template_after_replace
if($_POST['recipients']) {
$template = file_get_contents('template/emails/newsletter.html');
$addresses = explode(';', $_POST['recipients']);
$subject = stripslashes($_POST['subject']);
foreach($addresses as $address) {
$newsletter_unsign = ' <a href="http://dev.cater2.me/unsign-newsletter.php?id='.$address.'">Unsubscribe from the newsletter</a>.';
$template_after_replace = str_replace(array('{{newsletter_top_bar}}','{{newsletter_top}}','{{newsletter_title1}}','{{newsletter_body1}}','{{newsletter_title2}}','{{newsletter_body2}}','{{newsletter_title3}}','{{newsletter_body3}}','{{newsletter_side_title}}','{{newsletter_side}}','{{newsletter_bottom}}','{{newsletter_footer}}','{{newsletter_unsign}}'),
array($_POST['newsletter_top_bar'],$_POST['newsletter_top'],$_POST['newsletter_title1'],$_POST['newsletter_body1'],$_POST['newsletter_title2'],$_POST['newsletter_body2'],$_POST['newsletter_title3'],$_POST['newsletter_body3'],$_POST['newsletter_side_title'],$_POST['newsletter_side'],$_POST['newsletter_bottom'],$_POST['newsletter_footer'], $newsletter_unsign),
$template);
$address = trim($address);
sendMail($address, $subject, str_replace('{{c2me_tracking_link}}', 'http://cater2.me/?ref='.urlencode(c2me_encrypt($address)), $template_after_replace), true);
}
notif('E-mail(s) sent');
}
В качестве улучшения вы можете просто запустить замену один раз (перед циклом foreach
, чтобы заменить то, что не изменится (например, $_POST['newsletter_top']
), затем по отдельности заменить $newsletter_unsign
в цикле foreach
, но Я оставлю это как упражнение для ФП.