Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Klasa wysyłająca maila
Forum PHP.pl > Forum > PHP
Lejto
Mam klase wysyłającą maila
  1. <?
  2. class Emailer
  3. {
  4.    private $sender;
  5.    private $recipients;
  6.    private $subject;
  7.    private $body;
  8.    
  9.    function __construct($sender)
  10.    {
  11.        $this->sender = $sender;
  12.        $this->recipients = array();
  13.    }
  14.    public function addRecipients($recipient)
  15.    {
  16.        array_push($this->recipients, $recipient);
  17.    }
  18.    public function setSubject($subject)
  19.    {
  20.        $this->subject = $subject;
  21.    }
  22.    public function setBody($body)
  23.    {
  24.        $this->body = $body;
  25.    }
  26.    public function nag($email)
  27.    {
  28.               $header = "From:  <$email>\n";
  29.              $header .= "MIME-Version: 1.0\n";
  30.              $header .= "Content-type: text/html; charset=utf-8\n";
  31.              $header .= "Return-Path: <$email>";
  32.    }
  33.    public function sendEmail()
  34.    {
  35.        
  36.        foreach ($this->recipients as $recipient)
  37.        {
  38.            $result = mail($recipient,$this->subject,$this->body,$this->nag);
  39.            if($result)
  40.            {
  41.            echo '<div id="good">';
  42.            echo 'Wiadomość została wysłana';
  43.            echo '</div>';
  44.             }
  45.        }
  46.    }
  47.    
  48. }
  49. ?>

Dodałem funkcje z nagłówkami nag();
Uruchamiam tak:
  1. <?php
  2. $email = new Emailer($email); //adres od
  3.            $email->addRecipients("agencik@gmail.com"); // adres do
  4.            $email->setSubject($temat);
  5.            $email->setBody($wiadomosc);
  6.            $email->nag($email);
  7.            $email->sendEmail();
  8. ?>

wszystko działało dobrze tylko jak dodałem te nagłówki to otrzymuje taki błąd
Kod
Catchable fatal error: Object of class Emailer could not be converted to string in /home/s/public_html/s-s.eu/mail.class.php on line 28

w lini 28 znajduje się
  1. <?php
  2. $header = "From:  <$email>\n";
  3. ?>
osl
spójrz dobrze co tak na prawde robisz smile.gif
nadpisujesz stringa podawanego do konstruktora...
Spawnm
  1. <?php
  2. public function nag($email)
  3.   {
  4.              $header = "From:  <$email>\n";
  5.             $header .= "MIME-Version: 1.0\n";
  6.             $header .= "Content-type: text/html; charset=utf-8\n";
  7.             $header .= "Return-Path: <$email>";
  8.   }
  9. ?>

gdzie this-> lub return ?
Lejto
nie rozumiem za bardzo, mam dodać this w funkcji nag?
kbsucha
No nie, przy takiej konstrukcji nie, ale mozesz to zrobić bez parametru używając poprostu daną z konstruktora $this->sender.
No i w sendMail powinno być $this->nag(), a w metodzie jakis return. Ogolnie troche namieszales ;P
fander
Kod
<?php
class Emailer
{
   private $sender;
   private $recipients;
   private $subject;
   private $body;
  
   function __construct($sender)
   {
       $this->sender = $sender;
       $this->recipients = array();
   }
   public function addRecipients($recipient)
   {
       array_push($this->recipients, $recipient);
   }
   public function setSubject($subject)
   {
       $this->subject = $subject;
   }
   public function setBody($body)
   {
       $this->body = $body;
   }
  
  
   public function nag($email)
   {
       $header = "From:  <$email>\n";
       $header .= "MIME-Version: 1.0\n";
       $header .= "Content-type: text/html; charset=utf-8\n";
       $header .= "Return-Path: <$email>";
       return $header;
   }
   public function sendEmail()
   {
      
       foreach ($this->recipients as $recipient)
       {
              $result = mail($recipient,$this->subject,$this->body,$this->nag());
           if($result)
           {
           echo '<div id="good">';
           echo 'Wiadomość została wysłana';
           echo '</div>';
            }
       }
   }
  
}
?>


Takie coś
osl
koleżanki i kolegi, wszystko ok co piszecie powyżej, ale ni jak to się ma do errora.
@autor - masz stringa w zmiennej $email, potem do tej zmiennej przypisujesz obiekt, a na koniec używasz jej jako argumentu funkcji, która potrzebuje stringa. I stąd ten error. I poczytaj co jeszcze Ci sugerują powyżej, dobrze prawią smile.gif
fander
LOOOOL
Kod
<?php
[color="#ff0000"]$email [/color]= new Emailer($email); //adres od
            $email->addRecipients("agencik@gmail.com"); // adres do
            $email->setSubject($temat);
            $email->setBody($wiadomosc);
            [color="#ff0000"]$email->nag($email[/color][color="#ff0000"]);[/color]
            $email->sendEmail();
?>


$email->nag($email); <= nie może być czegoś takiego jak juz kolega powyżej zauważył zmień $email na $stringMail cokolwiek a dlatego to musisz zmienić ponieważ $email wyżej zadeklarowałeś jako Emailer a emaileraa nie da się wyświetlić jak stringa no chyba ze byśmy przeciązyli operatory ale w php nie da się ich przeciążyć.
Lejto
@fander twoja poprawka nic nie dała
fander
Kod
<?php
$email = new Emailer($sender); //adres od
            $email->addRecipients("agencik@gmail.com"); // adres do
            $email->setSubject($temat);
            $email->setBody($wiadomosc);
            $email->nag($mail)
            $email->sendEmail();
?>


Sprawdź teraz. Ten kod który wcześniej podałem nie był poprawiony!!! poniżej dałem ci wskazówki co i jak poprawić wystarczyło przeczytać uważnie moje sugestie.
phpion
Cytat(fander @ 2.07.2009, 13:48:30 ) *
LOOOOL

...

zadeklarowałeś jako Emailer a emaileraa nie da się wyświetlić jak stringa no chyba ze byśmy przeciązyli operatory ale w php nie da się ich przeciążyć.

LOOOOL a o metodzie __toString kolega nie słyszał? Operatorów nie da się przeciążyć, to prawda, ale można utworzyć metodę zwracającą obiekt w postaci stringu.

@Lejto:
Wydaje mi się, że powinno wystarczyć dodać metodę __toString (co nie rozwiąże problemu z generowaniem nagłówków) i jako tako powinno działać:
  1. <?php
  2. public function __toString() {
  3.        return $this->sender;
  4.    }
  5. ?>

Jednak lepiej by było jakbyś rozwiązał tą sprawę ciut inaczej. Sprawdź ten kod. Powinien działać ale nie sprawdzałem, pisałem na czuja.
  1. <?php
  2. class Emailer
  3. {
  4.   private $sender;
  5.   private $recipients;
  6.   private $subject;
  7.   private $body;
  8.     private $headers = array();
  9.  
  10.   function __construct($sender)
  11.   {
  12.       $this->sender = $sender;
  13.       $this->recipients = array();
  14.            
  15.             $this->addHeader('MIME-Version', '1.0');
  16.             $this->addHeader('Content-type', 'text/html; charset=utf-8');
  17.   }
  18.    
  19.   public function addRecipients($recipient)
  20.   {
  21.       array_push($this->recipients, $recipient);
  22.   }
  23.    
  24.   public function setSubject($subject)
  25.   {
  26.       $this->subject = $subject;
  27.   }
  28.    
  29.   public function setBody($body)
  30.   {
  31.       $this->body = $body;
  32.   }
  33.    
  34.     public function addHeader($name, $value) {
  35.        $this->headers[$name] = $value;
  36.     }
  37.    
  38.     private function getHeadersAsString() {
  39.        $return = '';
  40.        
  41.        foreach ($this->headers as $name => $value) {
  42.            $return .= $name.': '.$value."\n";
  43.        }
  44.        
  45.        return $return;
  46.     }
  47.  
  48.   public function sendEmail()
  49.   {
  50.            $headersAsString = $this->getHeadersAsString();
  51.      
  52.       foreach ($this->recipients as $recipient)
  53.       {
  54.           $result = mail($recipient,$this->subject,$this->body, $headersAsString);
  55.           if($result)
  56.           {
  57.           echo '<div id="good">';
  58.           echo 'Wiadomość została wysłana';
  59.           echo '</div>';
  60.            }
  61.       }
  62.   }
  63.  
  64. }
  65.  
  66. $email = 'nadawca@host.pl'; // od kogo jest mail
  67.  
  68. $emailer = new Emailer($email); //adres od
  69. $emailer->addRecipients("agencik@gmail.com"); // adres do
  70. $emailer->setSubject($temat);
  71. $emailer->setBody($wiadomosc);
  72.  
  73. // dodanie naglowkow
  74. $emailer->addHeader('From', $email);
  75. $emailer->addHeader('Return-Path', $email);
  76.  
  77. $emailer->sendEmail();
  78. ?>
Lejto
nie działa ;/ taki sam błąd jak wtedy
phpion
Cytat(Lejto @ 3.07.2009, 11:07:26 ) *
nie działa ;/ taki sam błąd jak wtedy

Tak? No to dziwne bo przed chwilą sprawdziłem oba podane przez siebie rozwiązania i oba działają poprawnie. Albo wcale ich nie sprawdziłeś albo bezmyślnie mówisz "nie działa" po ujrzeniu "Notice: Undefined variable".
fander
coś ktoś ściemnia, wystarczy zajrzeć w kod exclamation.gif! przeczytać błędy podstawić wartości exclamation.gif

Kod
$email = 'nadawca@host.pl'; // od kogo jest mail

$emailer = new Emailer($email); //adres od
$emailer->addRecipients("agencik@gmail.com"); // adres do
$emailer->setSubject("Temat wiadomosci");
$emailer->setBody("<b>Wiadomość</b>");

// dodanie naglowkow
$emailer->addHeader('From', $email);
$emailer->addHeader('Return-Path', $email);

$emailer->sendEmail();
?>
Lejto
nie, dostałem taki sam błąd jak wcześniej, teraz sprawdziłem jeszcze raz i jest ok, dzięki, może wtedy jak sprawdzałem to plik do końca się nie przesłał bo szybko to robiłem...
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.