web-dev-qa-db-ja.com

致命的なエラー:クラス 'PHPMailer'が見つかりません

  • 試してみました:include_once('C:\Inetpub\wwwroot\php\PHPMailer\PHPMailerAutoload.php');

致命的なエラー:クラス 'PHPMailer'がC:\ Inetpub\wwwroot\php\index.phpの151行目に見つかりません

PHPMailerAutoload.phpは私のスクリプトと同じディレクトリにあります。

誰かがこれで私を助けることができますか?

20
iori

すべての答えは今では時代遅れです。最新バージョン(2018年2月現在)には自動ロード機能がありません。PHPMailerは次のように初期化する必要があります。

<?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";
     }
?>
69
avs099

そのクラスを使用するために必要なすべてのファイルが存在するように聞こえません。私は最初からやり直します:

  1. ページの右下にある[zipのダウンロード]ボタンをクリックして、パッケージを https://github.com/PHPMailer/PHPMailer からダウンロードします。
  2. zipファイルを抽出します
  3. 言語フォルダー、class.phpmailer.php、class.pop3.php、class.smtp.php、およびPHPMailerAutoload.phpをすべてサーバー上の同じディレクトリにアップロードします。サーバーにphpmailerというディレクトリを作成して、これらの。
  4. クラスをPHPプロジェクトに含める:require_once('phpmailer/PHPMailerAutoload.php');
11
Drew

これは、まだ問題を抱えている人のために、avs099が上記に与えたものの拡張で答えます:

1. php_openssl.dllがインストールされていることを確認します(そうでない場合はオンラインで見つけてインストールします)。

2. php.iniに移動します。 extension = php_openssl.dllを有効にしますit/uncommentを有効にします

3. github に移動し、この時点で最新バージョンの6.0をダウンロードします。

4.マスターコピーを、より適切に機能するパスに抽出します(呼び出しファイルと同じディレクトリをお勧めします)

次に、このコードをfoo-mailer。phpにコピーし、Gmail stmp認証でレンダリングします。

    require("/PHPMailer-master/src/PHPMailer.php");
    require("/PHPMailer-master/src/SMTP.php");
    require("/PHPMailer-master/src/Exception.php");


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

    $mail->CharSet="UTF-8";
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPDebug = 1; 
    $mail->Port = 465 ; //465 or 587

     $mail->SMTPSecure = 'ssl';  
    $mail->SMTPAuth = true; 
    $mail->IsHTML(true);

    //Authentication
    $mail->Username = "[email protected]";
    $mail->Password = "*******";

    //Set Params
    $mail->SetFrom("[email protected]");
    $mail->AddAddress("[email protected]");
    $mail->Subject = "Test";
    $mail->Body = "hello";


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

免責事項:上記のコードの元の所有者はavs099です。

追加のことに注意してください:

a)(PHPMailer\PHPMailer)名前空間:名前の競合解決に必要です。

b)(require( "/ PHPMailer-master/src/Exception.php");):avs099のコードで欠落していたため、aProggerが遭遇した問題。 。

8
RickShaw

これは単なる名前空間です。参照用の例を見てください-名前空間付きクラスを使用するか、絶対に参照する必要があります。次に例を示します。

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

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

composerの取得を検討することをお勧めします。 https://getcomposer.org Composerは、サードパーティのライブラリをLOTに簡単に追加し、すべてのライブラリに単一のオートローダーを使用することを可能にします。いくつかの自動化機能とともに、依存関係が特定されます。

ダウンロード https://getcomposer.org/composer.phar to C:\Inetpub\wwwroot\php

C:\Inetpub\wwwroot\php\PHPMailer\ディレクトリを削除します。

composer.pharを使用して、コマンドラインを使用してphpmailerパッケージを取得し、実行します

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

完了すると、すべてのphpmailerファイルとともにC:\Inetpub\wwwroot\php\vendorディレクトリが作成され、オートローダーが生成されます。

次に、メインプロジェクトの構成ファイルに、オートロードファイルを含める必要があります。

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

vendor\autoload.phpには、$mail = new \PHPMailer;を使用するための情報が含まれます

PHPMailerパッケージに関する追加情報は、 https://packagist.org/packages/phpmailer/phpmailer にあります。

4
fyrye

2018年2月以降の新しいバージョンのPHPMailerは自動ロードをサポートしておらず、ライブラリをインスタンス化する重大な問題があったことを知っています。 MVCの名前空間、必要な人のためにコードを残します。

//Controller
    protected function getLibraryWNS($libreria) {
    $rutaLibreria = ROOT . 'libs' . DS . $libreria . '.php';

    if(is_readable($rutaLibreria)){
        require_once $rutaLibreria;
        echo $rutaLibreria . '<br/>';
    }
    else{
        throw new Exception('Error de libreria');
    }
}

//loginController
    public function enviarEmail($email, $nombre, $asunto, $cuerpo){
    //Import the PHPMailer class into the global namespace
            $this->getLibraryWNS('PHPMailer');
            $this->getLibraryWNS('SMTP');
    //Create a new PHPMailer instance
            $mail = new \PHPMailer\PHPMailer\PHPMailer();
    //Tell PHPMailer to use SMTP
            $mail->isSMTP();
    //Enable SMTP debugging
    //      $mail->SMTPDebug = 0;                                       // 0 = off (for production use),  1 = client messages, 2 = client and server messages  Godaddy POR CONFIRMAR
            $mail->SMTPDebug = 1;                                       // debugging: 1 = errors and messages, 2 = messages only
    //Whether to use SMTP authentication
            $mail->SMTPAuth = true;                                     // authentication enabled
    //Set the encryption system to use - ssl (deprecated) or tls
            $mail->SMTPSecure = 'ssl';                                  //Seguridad Correo Gmail
    //Set the hostname of the mail server
            $mail->Host = "smtp.gmail.com";                             //Host Correo Gmail
    //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
            $mail->Port = 465;      //587;
    //Verifica si el servidor acepta envios en HTML
            $mail->IsHTML(true);
    //Username to use for SMTP authentication - use full email address for gmail
            $mail->Username = '[email protected]';
    //Password to use for SMTP authentication
            $mail->Password = 'tucontraseña';
    //Set who the message is to be sent from
            $mail->setFrom('[email protected]','Creador de Páginas Web');
            $mail->Subject = $asunto;
            $mail->Body = $cuerpo;
    //Set who the message is to be sent to
            $mail->addAddress($email, $nombre);
    //Send the message, check for errors
    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
        return false;
    } else {
        echo "Message has been sent";
        return true;
    }
1
Just download composer and install phpMailler autoloader.php

https://github.com/PHPMailer/PHPMailer/blob/master/composer.json

once composer is loaded use below code:

    require_once("phpMailer/class.phpmailer.php");
    require_once("phpMailer/PHPMailerAutoload.php");

    $mail = new PHPMailer(true); 
            $mail->SMTPDebug = true;
            $mail->SMTPSecure = "tls";
            $mail->SMTPAuth   = true;
            $mail->Username   = 'youremail id';
            $mail->Password   = 'youremail password';
            $mail_from        = "youremail id";
            $subject          = "Your Subject";
            $body             = "email body";
            $mail_to          = "receiver_email";
            $mail->IsSMTP(); 
            try {
                  $mail->Host= "smtp.your.com";
                  $mail->Port = "Your SMTP Port No";// ssl port :465, 
                  $mail->Debugoutput = 'html';
                  $mail->AddAddress($mail_to, "receiver_name");
                  $mail->SetFrom($mail_from,'AmpleChat Team'); 
                  $mail->Subject = $subject;
                  $mail->MsgHTML($body);
                  $mail->Send();
                 $emailreturn = 200;
                } catch (phpmailerException $e) {
                  $emailreturn = $e->errorMessage();             
                } catch (Exception $e) {
                 $emailreturn = $e->getMessage();
                }
    echo $emailreturn;

これがうまくいくことを願っています。

0
Deepak Singh

これに似たエラーがいくつかありました。 setFromメールアドレスが$mail->setFrom()で有効であることを確認してください

0
Sanjoy

書いたものを読んでから、ファイルclass.phpmailer.phpをディレクトリにも追加する必要があります。

0
Calvin K

PHPMailerAutoloadclass.phpmailer.phpと同じフォルダーにある必要があります

これは、私がこれを想定しているPHPMailerAutoloadコードです。

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