Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z phpmailer
Forum PHP.pl > Forum > PHP
siwybob
Witam,
Korzystam z "class.phpmailer.php" do wysyłania eamili z newsletterem

Wywołuje skrypt cron.php i wysyłam do adresatów newslettera (np. 25 naraz)
Baza adresów jest w tabelach mysqla (tabela z polami: id, from_name, from_email, to_name, to_email, subject, body, sent, attempt)

Wszystko przechodzi, ale zauważyłem jeden problem: jeśli odczytam sobie maila z subskrypcji i użyje "odpowiedz nadawcy" (replay-to, lub zajrze we właściwości maila) w sekcji replay-to pojawia mi się, np. 25 odbiorców, z identycznym emailem (tym wysyłkowym, np.: newsletter@poczta.pl przykładowo...)

linia z Replay-to wygląda przykładowo tak:

(...)
Reply-to: "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>, "SYSTEM SUBSKRYPCJI" <newsletter@poczta.pl>
(...)



skrypt cron.php wygląda tak:

  1. <?php
  2.  $sql_connection = connect_to_database();
  3.  $result = mysql_query("SELECT * FROM cron_mail ORDER BY id ASC LIMIT 25";
  4.  if (mysql_num_rows($result) != 0)  {
  5.    require "class/class.phpmailer.php";
  6.    $mailer = new PHPMailer();
  7.    $mailer->CharSet = "iso-8859-2";
  8.    $mailer->IsHTML(true);
  9.    $mailer->Encoding = "8bit";
  10.    $mailer->Port = 25;
  11.    while ($row = mysql_fetch_array($result))  {
  12.      if (eregi('poczta.pl', $row[from_email]) || eregi('poczta2.pl', $row[from_email])) {
  13.        $mailer->From = $row[from_email];
  14.      } else {
  15.        $mailer->From = $config[form_nadawca_email];
  16.      }
  17.    $mailer->FromName = $row[from_name];
  18.    $mailer->AddAddress($row[to_email], $row[to_name]);
  19.    $mailer->AddReplyTo($row[from_email], $row[from_name]);
  20.    $mailer->Subject = $row[subject];
  21.    $mailer->Body = stripslashes(nl2br($row[body]));
  22.    if(!$mailer->Send())  {
  23.      mysql_query("UPDATE cron_mail SET attempt = (attempt+1) WHERE id = '".$row[id]."' LIMIT 1");
  24.    }  else  {
  25.      mysql_query("DELETE FROM cron_mail WHERE id = '".$row[id]."' LIMIT 1");
  26.    }
  27.    if ($row[attempt] == ($config[cron_mail_attempt]-1))  {
  28.      mysql_query("DELETE FROM cron_mail WHERE id = '".$row[id]."' LIMIT 1");
  29.    }
  30.    $mailer->ClearAllRecipients();
  31.  }
  32.  optimize_table('cron_mail');
  33.  }
  34.  disconnect_from_database($sql_connection);
  35. ?>



jak to zmienić, może jakieś uwagi...

THX
siwybob
erix
BCC, zamiast takiego bałaganu. tongue.gif

Poza tym:
  1. <?php
  2. $mailer->From = $row[from_email];
  3. ?>

Nadpisujesz w pętli N razy tę samą wartość.
siwybob
BCC tzn. jak to w tym przykładzie zastosować...? Z replay-to zupełnie zrezygnować...? Czy to rozwiąże ten problem...?
thx
erix
Ałć, co innego zrozumiałem.

Daj w pętli var_dump" title="Zobacz w manualu PHP" target="_manual na $row. Poza tym, używaj kluczy tablic w postaci stringów, a nie stałych, jak to ma teraz miejsce u Ciebie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.