Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][mySQL] generowanie emaili z danymi pobranymi z DB
suse
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 10.07.2007

Ostrzeżenie: (0%)
-----


Witam,

Postaram sie jak najkrocej opisac moj problem.

Staram sie stworzyc mechanizm, ktory bedzie wysylal automatycznie emaile do dwoch grup uzytkownikow systemu:

1. Aplikantow, ktorzy zarejestrowali Projekt (glowni adresaci)
2. Pozostalych osob 'zamieszanych' w Projekt (adresaci Cc)

Glowna funkcja (w uproszczeniu) wyglada tak:

  1. <?php
  2. function send_email() {
  3.  
  4.  
  5. $subject = "Raport koncowy";
  6.  
  7.  
  8. $query = "SELECT (...)
  9. FROM project, people, members
  10. WHERE (...)
  11. AND members.status = 'Aplikant'
  12. ORDER BY project.id
  13. ";
  14.  
  15.  
  16.  
  17. $this->dblayer->runQuery($query);
  18.  
  19. while ($row = $this->dblayer->getNextRow()) {
  20.  
  21.  
  22.  
  23.  
  24. $to_address = $row['email'];
  25.  
  26. $row['cc_email'] = $this->list_ccEmails($row['project_id'], $row['applicant_id']);
  27.  
  28.  
  29.  $headers = "From: system@domain.comrn";
  30.  $headers .= .$row['cc_email']."rn"; #*****#
  31.  $headers .= "Bcc: admin@domain.comrn";
  32.  $headers .= "Content-Type: text/html; charset=ISO-8859-1 ";
  33.  $headers .= "MIME-Version: 1.0 ";
  34.  
  35. $body = "<p>Do: ".$row['first_name']." ".$row['last_name'].", </p>";
  36.  
  37. $body .= "<p>Dotyczy projektu: ".$row['project_id']." - ".stripslashes($row['project_title'])."</p>";
  38. $body .= "(...)";
  39.  
  40. if (mail($to_address, $subject, $body, $headers)) {
  41.  
  42.  
  43. $email_to = addslashes($to_address);
  44. $email_cc = addslashes($row['cc_email']);
  45. $email_subject = addslashes($subject);
  46. $project_id = $row['project_id'];
  47. $followup_date = date('Y-m-d', strtotime($row['follow_up_date']));
  48. $sql = "INSERT INTO
  49. (...)
  50.  ";
  51.  
  52.  $added = $this->dblayer->runInsert($sql);
  53.  
  54. if (!$added) {
  55. $error_returned .= mysql_error();
  56.  return $error_returned;
  57.  }
  58.  
  59.  }
  60. }
  61. }
  62. ?>


Do generowania listy adresatow Cc mam druga funkcje list_ccEmails i generuje ona ciag adresow poprawnie.

Problem lezy w tym, ze gdy staram sie w powyzszy sposob (linia kodu oznaczona #*****#) wstawic do emaila ciag cc, wysylany jest tylko jeden email z listy, dotyczacy pierwszego projektu (do Aplikanta i osob cc).

Gdy do zmiennej $row['cc_email'] przypisze zamiast

  1. <?php
  2. $row['cc_email'] = $this->list_ccEmails($row['project_id'], $row['applicant_id']);
  3. ?>


jakis ciag, np tak:

  1. <?php
  2. $row['cc_email'] = "adres1@doman, adres2@domain";
  3. ?>



wysylane sa wszystkie emaile do Aplikantow kazdego projektu, ale rzecz jasna bez Cc


Czy ktos moglby mi podpowiedziec gdzie robie blad? Mecze sie z tym juz od kilku dni i chyba sie zapetlilam...

Z gory dziekuje

suse

Ten post edytował suse 10.07.2007, 21:57:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
spoksss
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.11.2005

Ostrzeżenie: (0%)
-----


Polecam ci skorzystanie z ZendFrameworka do wysyłki wiadomości.
Jest to rozwiązanie: bezpieczne, wygodne, niezawodne

Dla twojego problemu mogłoby to wyglądać mniej więcej tak:
  1. <?php
  2. // to umieszczasz w pliku konfiguracyjnym
  3.  
  4. // pełna nazwa konta e-mail
  5. define("EMAIL_KONTO", 'jas@kowalski.pl');
  6. // hasło do konta e-mail
  7. define("EMAIL_HASLO", "skomplikowaneHasloJasia");
  8. // adres serwera SMTP do wysyłki e-maili
  9. define("EMAIL_SERWER", "kowalski.pl");
  10. // teraz rozpoczynasz wysylke
  11.  
  12. $tabelaDanychUzytkownikow = select_cc($project_id, $user_id);
  13. if(count($tabelaDanychUzytkownikow) == 0){
  14. return false;
  15. }
  16.  
  17. try {
  18. $config = array('auth' => 'login',
  19. 'username' => EMAIL_KONTO,
  20. 'password' => EMAIL_HASLO);
  21. $transport = new Zend_Mail_Transport_Smtp(EMAIL_SERWER, $config);
  22. $nadawca = "twojAdresEmail" ;
  23. $opisNadawcy = "Nazwa twojej aplikacji";
  24. // ustawiasz kodowanie znaków dla wiadomości
  25. $mail = new Zend_Mail('utf-8');
  26. // jeżeli chcesz możesz wybrać wiadomość w formacie html lub txt
  27. $mail->setBodyHtml($trescPotwierdzeniaMail);
  28. // ustawiasz od kogo mają zostać wysłane wiadomości
  29. $mail->setFrom($nadawca, $opisNadawcy);
  30.  
  31. $mail->addTo($email, $imie.' '.$nazwisko);
  32.  
  33. foreach ($tabelaDanychUzytkownikow as $wiersz){
  34. $mail->addTo($wiersz['cc_email'],$wiersz['cc_email']);
  35. // możesz również dodawać użytkowników do kopii ukrytej
  36. // nie będę się rozpisywał, kod chyba tego nie wymaga 
  37. // $mail->addBcc();
  38. }
  39. // Ustawiasz tytuł wiadomości e-mail
  40. $mail->setSubject("Twój tytuł wiadomości e-mail");
  41. // wysyłasz wiadomość
  42. $mail->send($transport);
  43. // jeżeli cokolwiek pójdzie nie tak masz to w logu i możesz wysłać jeszcze raz
  44. // masz nad wszystkim pełną kontrole
  45. }catch(Zend_Mail_Transport_Exception $e )
  46. {
  47. // tutaj używam klasy loga
  48. // może to być prosta funkcja
  49. // np. dopiszLoga($trescLoga)
  50. Log::ELog("Błąd! nie można wysłać e-maila. Treść błędu:".$e);
  51. }
  52. ?>

pozdrawiam

Ten post edytował spoksss 10.07.2007, 23:58:25
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 03:18