Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHPMailer kolejny egzemplarz
Forum PHP.pl > Forum > PHP
Dominik137
Witam, stworzyłem sobie funkcję z gotowym wywołaniem klasy PHPMailer. O to kod
  1. function phpmailer($mail_adres,$subject,$body) {
  2.  
  3. if(!@include(PHPMAILER_DIR)) {
  4. return false;
  5. }
  6.  
  7. $mail = new phpmailer();
  8.  
  9. $mail->From = PHPMAILER_FROM;
  10. $mail->FromName = PHPMAILER_FROMNAME;
  11. $mail->Host = PHPMAILER_HOST;
  12. $mail->Mailer = PHPMAILER_MAILER;
  13. $mail->CharSet = "UTF-8";
  14. $mail->IsSMTP(); // send via SMTP
  15. $mail->SMTPAuth = true; // turn on SMTP authentication
  16. $mail->Username = PHPMAILER_USERNAME; // SMTP username
  17. $mail->Password = PHPMAILER_PASSWORD; // SMTP password
  18.  
  19.  
  20. $mail->Subject = $subject;
  21. $mail->Body = $body;
  22. $mail->IsHTML(true); // send as HTML
  23. $mail->AddAddress($mail_adres);
  24.  
  25. //echo na okres testowania
  26. echo 'Do: '.$mail_adres.' Tekst: '.$mail->Body.' Temat: '.$mail->Subject.' (Username: '.$mail->Username.' Pass: '.$mail->Password.' smtp:'.$mail->Host.')<br>';
  27. if(!$mail->Send()) {
  28. return $mail->ErrorInfo;
  29. }else{
  30. $mail->ClearAddresses();
  31. unset($mail);
  32. return true;
  33. }
  34. }

Problem polega na tym, że przy drugim użyciu funkcji phpmailer, kod po "$mail = new phpmailer();" nie wykonuje się..funkcja nic nie zwraca, ani nie wysyła e-mail'a...Przy pierwszym wywołaniu funkcji wszystko wykonuje się poprawnie. Spróbowałem dodać unset, aby zlikwidować egzemplarz klasy phpmailer, ale to nie pomaga - w końcu powinien po wykonaniu się funkcji samemu się unicestwić.
Co Wy na to? Od razu upszedzę, że rozwiązanie typu dodanie kolejnych adresów w istniejącym wywołaniu klasy odpada.
Z góry dzięki za pomoc i pozdrawiam
tabbi
daj wynik przy 2 użyciu funkcji
var_dump($mail);

Może warto wydzielić obiekt poza funkcję i oprócz danych przekazywać zmienną obiektową. Jeśli np. używamy kilka razy tej funkcji w trakcie jednego wywołania.

Może unset($mail) pomoże;
vokiel
Może nazwij swoją funkcję inaczej niż klasa PHPMailer'a.

Po drugie może lepiej pójdź w stronę OOP. Stworzysz sobie raz obiekt PHPMailer'a, a później będziesz mógł z niego korzystać (zmieniać treść, temat i odbiorców).
Dominik137
var_dump($mail); nic nie zwraca ani przed ani po utworzeniu egzemplarza w drugim wywołaniu funkcji. Zmiana nazwy funkcji też nie pomaga.
Wydzielenie obiektu po za funkcje wydaje się być rozwiązaniem zbyt łatwym:D (wole mieć wszystko w jednym, aby mieć z głowy wywoływanie wcześniej obiektu). Chodź z drugiej strony abstrahując od tego, nie uważacie, że to dziwne zachowanie PHP ? Czy klasa PHPMailer ma jakieś zabezpieczenie, tak jakby implementowała singleton?
Pozdrawiam i mam nadzieje, że wszyscy już najedzeni^^
Kofel
  1. if(!@include(PHPMAILER_DIR)) {
  2. return false;
  3. }


Pierwszy raz plik Ci się zainkluduje. Drugi raz już nie, bo PHP wywala błąd (w Twoim przypadku nie, bo użyłeś prefixu @), że już wcześniej ten plik był dołączony, a funkcja include zwraca false.
Po prostu usuń ten fragment kodu. Same dołączanie pliku PHPMailera zrób jednokrotnie przed definicją Twojej funkcji.

Edit: Albo zamień include na include_once.
Dominik137
Kofel dzięki, ale mnie zawstydziłeśbiggrin.gif ehh..nie mogę sobie wybaczyć, że coś tak oczywistego przegapiłem. Pozdrawiam
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.