Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHPMailer problem z załączeniem >1 załącznika
Forum PHP.pl > Forum > Gotowe rozwiązania
adrian1987
Hej, właśnie podłączyłem u siebie klasę PHPMailer i wszystko mi działa poza 1 faktem, gdy dołączam więcej niż 1 załącznik to wysyłany jest tylko ten pierwszy dodany, reszta nie jest załączana...
Czy komuś się udało na tej klasie wysłać więcej niż 1 załącznik do maila??
mój kod wygląda następująco
  1. <?php
  2. $tresc = "jakaś tam treść";
  3.        require("phpmailer/class.phpmailer.php");
  4.        $mail = new PHPMailer();
  5.        
  6.        $mail->PluginDir = "phpmailer/";
  7.        $mail->From = "adres"; //adres naszego konta
  8.        $mail->FromName = "phpMailer tester";//nagłówek From
  9.        $mail->Host = "serwer SMTP";//adres serwera SMTP
  10.        $mail->Mailer = "smtp";
  11.        $mail->Username = "xxx";//nazwa użytkownika
  12.        $mail->Password = "xxx";//nasze hasło do konta SMTP
  13.        $mail->SMTPAuth = true;
  14.        $mail->SetLanguage("pl", "phpmailer/language/");
  15.        $mail->CharSet = 'utf-8';
  16.        
  17.        $mail->Subject = "E-mail z fomularza na stronie WWW";//temat maila
  18.        $mail->AddReplyTo($_POST['email']);
  19.        
  20.        // w zmienną $text_body wpisujemy treść maila
  21.        $text_body = $tresc;
  22.        
  23.        $mail->Body = $text_body;
  24.        // adresatów dodajemy poprzez metode 'AddAddress'
  25.        $mail->AddAddress("odbiorca","Adrian");
  26.        
  27.        //dodajemy załączniki
  28.        $files = $_FILES['files'];
  29.        $x = count($files['name']);
  30.        if($files['name'][0] != NULL)
  31.        {
  32.            for($i=0; $i<$x; $i++)
  33.            {
  34.                $mail->AddAttachment($files['tmp_name'][$i],$files['name'][$i]);
  35.                echo('Plik: '.$files['name'][$i].' został załączony do e-maila<br />');
  36.            }
  37.        }
  38.        
  39.        //wysyłamy wiadomość e-mial.
  40.        if(!$mail->Send())
  41.        {
  42.            echo "Wystąpił błąd, niestety wiadomość nie została wysłana.<br>";
  43.            echo $mail->ErrorInfo."<br>";
  44.        }
  45.        else echo "Twoja wiadomość została wysłana.";
  46.        
  47.        // Clear all addresses and attachments
  48.        $mail->ClearAddresses();
  49.        $mail->ClearAttachments();
  50. ?>

I w tej pętli for w której przechodzę po tablicy $files żeby dodać wszystkie załączniki echo wyświetla wszystko poprawnie, czyli pętla przeszła po całej tablicy i wszystko zostało dobrze odczytane, ale linia wyżej $mail->AddAttachment() niestety coś musiała nie zadziałać poprawnie, albo ja o czymś nie wiem... bo w mailu jest zawsze tylko pierwszy załącznik. Czy może ta klasa ma jakieś ograniczenie do tylko 1 załącznika??
znalazłem w necie coś takiego: LINK i dokładnie tak mam... oni w tym przykładzie załączają 2 pliki, czyli powinna być taka możliwość...

co jest dziwne to fakt, iż jak pogrzebałem w strukturze klasy to odnalazłem funkcję która pokazuje tablicę attachment w której przetrzymywane są załączniki w klasie no i wszystkie które dodaje tam występują, nie mam zatem pojęcia dlaczego w wysłanym e-mailu ich nie ma...
niedarek
Podobno ten problem występuje przy korzystaniu z smtp.
To jest jakiś bug, na stronie: strona jest takie rozwiązanie:

Trzeba zmodyfikować linię 1236 w pliku class.phpmailer.php:
wstawić:
7 => count($this->attachment)
zamiast:
7 => 0

U mnie pomogło smile.gif

Kod
    
  
    
   before:
         $this->attachment[] = array(
           0 => $path,
           1 => $filename,
           2 => $name,
           3 => $encoding,
           4 => $type,
           5 => false,  // isStringAttachment
           6 => 'attachment',
           7 => 0
         );
   now:
         $this->attachment[] = array(
           0 => $path,
           1 => $filename,
           2 => $name,
           3 => $encoding,
           4 => $type,
           5 => false,  // isStringAttachment
           6 => 'attachment',
   //        7 => 0
           7 => count($this->attachment)
         );
pieto
u mnie, nie sad.gif
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.