2015-03-06 29 views
7
  • Próbowałem: include_once('C:\Inetpub\wwwroot\php\PHPMailer\PHPMailerAutoload.php');

Fatal error: Class 'PHPMailer' not found in C:\Inetpub\wwwroot\php\index.php on line 151Fatal error: Class 'PHPMailer' Nie znaleziono

I umieścić PHPMailerAutoload.php w tym samym katalogu, co moim skrypcie.

Czy ktoś może mi w tym pomóc?

+1

Gdzie jest Twój plik 'PHPMailerAutoload.php' znajduje? Czy umieścisz również ten kod, który tutaj pokazujesz, w innym pliku? – Rizier123

+0

w tym miejscu 'C: \ Inetpub \ wwwroot \ php \ 'ta sama ścieżka co moja ** index.php ** – iori

+1

w oparciu o samą nazwę, wygląda na to, że plik PHPMailerAutoload.php próbuje zlokalizować rzeczywisty plik klasy dla PHPMailera i nie jest w stanie tego zrobić. Zajrzałbym do tego pliku, żeby zobaczyć, gdzie próbuje sprawdzić i sprawdzić, czy rzeczywisty plik klasy istnieje w jednej z tych lokalizacji. – Drew

Odpowiedz

0

Po przeczytaniu tego, co napisałeś, będziesz musiał dodać plik class.phpmailer.php również do swojego katalogu.

0

PHPMailerAutoload musi być w tym samym folderze co class.phpmailer.php

ten kod PHPMailerAutoload że zakładam tak:

$filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; 
10

Nie brzmi jak wszystkie pliki potrzebne do wykorzystania tej klasy są obecne . Zacznę od nowa:

  1. Pobierz pakiet z https://github.com/PHPMailer/PHPMailer, klikając przycisk "Pobierz ZIP" w prawym dolnym rogu strony.
  2. wyodrębnić plik zip
  3. przesłać folder język, class.phpmailer.php, class.pop3.php, class.smtp.php i PHPMailerAutoload.php wszystko w tym samym katalogu na serwerze, lubię tworzyć katalog na serwerze o nazwie phpmailer, aby umieścić wszystkie te w.
  4. obejmują klasę w projekcie PHP: require_once('phpmailer/PHPMailerAutoload.php');
+0

Dołączam to podobnie do tego 'include_once ('\ PHPMailer \ PHPMailerAutoload.php'); ', i działa również. – iori

+0

Po prostu wyjaśnić moją edycję - od wersji 5.2.9 (aktualna wersja) PHPMailer nie próbuje załadować klasy SMTP ani autoloadera, więc jeśli załadujesz tylko klasę PHPMailer i spróbujesz wysłać używając 'isSMTP', to złamie się. Ta konfiguracja sprawia, że ​​dobrze gra z takimi rzeczami, jak kompozytor i ułatwia pracę z własnymi podklasami, ponieważ nie narzuca już trudnej zależności. – Synchro

2

Proponuję spojrzeć na uzyskanie composer. https://getcomposer.org Composer sprawia, że ​​pobieranie bibliotek stron trzecich jest łatwiejsze i przy użyciu jednego automatycznego mechanizmu ładującego dla wszystkich. Standaryzuje również na podstawie lokalizacji wszystkich twoich zależności, wraz z pewnymi możliwościami automatyzacji.

Pobierz https://getcomposer.org/composer.phar do C:\Inetpub\wwwroot\php

Usuń katalog C:\Inetpub\wwwroot\php\PHPMailer\.

Zastosowanie composer.phar dostać pakiet PHPMailer pomocą wiersza polecenia do wykonania

cd C:\Inetpub\wwwroot\php 
php composer.phar require phpmailer/phpmailer 

Po jej zakończeniu będzie utworzyć katalog C:\Inetpub\wwwroot\php\vendor wraz ze wszystkimi plikami PHPMailer i wygenerować autoloadera.

Następnie w głównym pliku konfiguracyjnym projektu należy dołączyć plik autoload.

require_once 'C:\Inetpub\wwwroot\php\vendor\autoload.php';

The vendor\autoload.php będzie zawierać informacje na korzystanie $mail = new \PHPMailer;

dodatkowe informacje na opakowaniu PHPMailer można znaleźć na https://packagist.org/packages/phpmailer/phpmailer

3

To jest właśnie przestrzeni nazw.Spójrz na przykłady odniesienia - trzeba też używać przestrzeni nazw klasy lub odwołać go całkowicie, na przykład:

use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\Exception; 

//Load composer's autoloader 
require 'vendor/autoload.php'; 
+0

Nie zapewnia to odpowiedzi na pytanie. Możesz wyszukać podobne pytania (// stackoverflow.com/search) lub odnieść się do powiązanych i powiązanych pytań po prawej stronie, aby znaleźć odpowiedź. Jeśli masz powiązane, ale inne pytanie, [zadaj nowe pytanie] (// stackoverflow.com/questions/ask) i dołącz link do tego, aby pomóc zapewnić kontekst. Zobacz: [Zadawaj pytania, otrzymuj odpowiedzi, nie rozpraszaj] (// stackoverflow.com/tour) –

2

wszystkie odpowiedzi są przestarzałe teraz. Najbardziej aktualnej wersji (od lutego 2018) nie ma już autoload i PHPMailer powinny zostać zainicjowane w następujący sposób:

<?php 

    require("/home/site/libs/PHPMailer-master/src/PHPMailer.php"); 
    require("/home/site/libs/PHPMailer-master/src/SMTP.php"); 

    $mail = new PHPMailer\PHPMailer\PHPMailer(); 
    $mail->IsSMTP(); // enable SMTP 

    $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only 
    $mail->SMTPAuth = true; // authentication enabled 
    $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail 
    $mail->Host = "smtp.gmail.com"; 
    $mail->Port = 465; // or 587 
    $mail->IsHTML(true); 
    $mail->Username = "xxxxxx"; 
    $mail->Password = "xxxx"; 
    $mail->SetFrom("[email protected]"); 
    $mail->Subject = "Test"; 
    $mail->Body = "hello"; 
    $mail->AddAddress("[email protected]"); 

    if(!$mail->Send()) { 
     echo "Mailer Error: " . $mail->ErrorInfo; 
    } else { 
     echo "Message has been sent"; 
    } 
?> 
+0

To było idealne, dziękuję. Nie mogłem go znaleźć nigdzie na dokumentach. –