отписаться от рассылки - PullRequest
       39

отписаться от рассылки

0 голосов
/ 08 февраля 2012

Я хочу добавить linf для неподписания в моей рассылке. Я не могу указать свою переменную "email" в бюллетене. Я отправляю новостную рассылку одновременно на несколько писем $ template позволяет рассылке получать данные из базы данных, а моя рассылка в html с такими переменными: {{variable}} Я пытался вставить свой шаблон кода в свое время, но электронная почта все еще первая электронная почта. У вас есть идея?

вот код:

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 = 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), true);
    }

    notif('E-mail(s) sent');
}

}

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Вы извлекаете $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, но Я оставлю это как упражнение для ФП.

0 голосов
/ 08 февраля 2012
if($_POST['recipients']) {

    $original_template = file_get_contents('template/emails/newsletter.html');

    $addresses = explode(';', $_POST['recipients']);
    $subject = stripslashes($_POST['subject']);

    foreach($addresses as $address) {

      // You should have made sure before/outside the foreach loop, that the e-mails are well-formatted and valid
      $address = trim($address);

      $this_template = $original_template;

      $newsletter_unsign =  ' <a href="http://dev.cater2.me/unsign-newsletter.php?id='.$address.'">Unsubscribe from the newsletter</a>.';

      $this_template = 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),
                  $this_template);

      sendMail($address, $subject, str_replace('{{c2me_tracking_link}}', 'http://cater2.me/?ref='.urlencode(c2me_encrypt($address)), $this_template), true);
    }
    notif('E-mail(s) sent');

}

...