Autor Zpráva
miro84
Profil *
Zdravím všechny,
moooooc prosím o pomoc.
Mám v xml souboru seznam příjemcu a příloh, které musím odeslat. Použil jsem phpmailer a vše vypadá, že funguje až na jednu věc. Pošle se mi zpráva a příloha jen na první email v seznamu. Potřebuji, aby phpmailer odeslal zprávu s přílohou na všechny adresy jednu po druhé.
Vím, že stačí trochu hledat a něco se naučit, ale musím to nutně dnes poslat a už mi z toho hrabe :-).
Moc proto prosím, poradí někdo jak to udělat?

kod:
<?php
//načtení xml souboru
$xml = simplexml_load_file("seznam.xml");
 
//přiřazení proměnných    
foreach ($xml->Table1 as $v)   
         {      
          
          $email = $v->email;
          $from = "info@xxxxx.cz";
          $subj = "Faktura za služby";
          $priloha = $v->priloha;
          $body =  "Vážený zákazníku, fakturujeme Vám ...................";
          
                     
  require "class.phpmailer.php";
  $mail = new PHPMailer();
  $mail->IsSMTP();  // k odeslání e-mailu použijeme SMTP server
  $mail->Host = "smtp-xxx.net";  // zadáme adresu SMTP serveru
  $mail->SMTPAuth = true;               // nastavíme true v případě, že server vyžaduje SMTP autentizaci
  $mail->Username = "info@xxxxx.cz";   // uživatelské jméno pro SMTP autentizaci
  $mail->Password = "xxxxxx";            // heslo pro SMTP autentizaci
  $mail->From = "info@xxxxxx.cz";   // adresa odesílatele skriptu
  $mail->FromName = "xxxxxx a.s."; // jméno odesílatele skriptu (zobrazí se vedle adresy odesílatele)
 
  $mail->AddAddress($email);  // přidáme příjemce
 
 
  $mail->IsHTML(true);  // bude to HTML e-mail
  $mail->Subject = "Faktura za služby";    // nastavíme předmět e-mailu
 
  // nastavíme HTML tělo e-mailu
  $mail->Body = "Vážený zákazníku, fakturujeme Vám ...................";
  // nastavíme textové tělo e-mailu
  $mail->AltBody = "Vážený zákazníku, fakturujeme Vám ...................";
  $mail->WordWrap = 50;   // je vhodné taky nastavit zalomení (po 50 znacích)
  $mail->CharSet = "utf-8";   // nastavíme kódování, ve kterém odesíláme e-mail
 
  // vložíme první soubor
  $mail->AddAttachment("$priloha");
 
  if(!$mail->Send()) {  // odešleme e-mail
     echo 'Došlo k chybě při odeslání e-mailu.';
     echo 'Chybová hláška: ' . $mail->ErrorInfo;
  }
  else
  {
     echo 'E-mail byl v pořádku odeslán.';
  }
  }
?>
Joker
Profil
miro84:
U těch dalších to vypíše chybu, nebo neudělá nic?
miro84
Profil *
Joker:
Ano
Fatal error: Cannot redeclare class phpmailerException in /data/web/virtuals/66862/virtual/www/class.phpmailer.php on line 3414
Kcko
Profil
require "class.phpmailer.php";

bud nahradit za require_once nebo uplně vyhodit z cyklu a dát to někam nad to.
miro84
Profil *
Kcko:
Pomohla náhrada... Moc díky.
Joker
Profil
Kcko [#4]:
Anebo udělat obojí :-)

Dát require na začátek je každopádně lepší (i require_once minimálně musí zkontrolovat, jestli se ten soubor už vložil, což je zbytečná činnost v každém cyklu) a když se má dělat jen jednou, tak pro jistotu require_once.
Kcko
Profil
Joker:
require_once jsem napsal schválně, protože neznám kontext skriptu a bůhví kam by to miro84 dal ;) a vznikaly by tu další otázky.
Obojí asi ne, ne? K čemu by to bylo dobré? :)
Joker
Profil
Kcko:
Obojí asi ne, ne? K čemu by to bylo dobré? :)
Hodí se, pokud se celý ten soubor později vloží někam jinam.
Jelikož ten soubor obsahuje definici třídy a v libovolném skriptu může být maximálně jednou, klidně bych tam require_once dal.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: