include_once('C:\Inetpub\wwwroot\php\PHPMailer\PHPMailerAutoload.php');
致命的なエラー:クラス 'PHPMailer'がC:\ Inetpub\wwwroot\php\index.phpの151行目に見つかりません
PHPMailerAutoload.php
は私のスクリプトと同じディレクトリにあります。
誰かがこれで私を助けることができますか?
すべての答えは今では時代遅れです。最新バージョン(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";
}
?>
そのクラスを使用するために必要なすべてのファイルが存在するように聞こえません。私は最初からやり直します:
require_once('phpmailer/PHPMailerAutoload.php');
これは、まだ問題を抱えている人のために、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が遭遇した問題。 。
これは単なる名前空間です。参照用の例を見てください-名前空間付きクラスを使用するか、絶対に参照する必要があります。次に例を示します。
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//Load composer's autoloader
require 'vendor/autoload.php';
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 にあります。
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;
}
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;
これがうまくいくことを願っています。
これに似たエラーがいくつかありました。 setFromメールアドレスが$mail->setFrom()
で有効であることを確認してください
書いたものを読んでから、ファイルclass.phpmailer.phpをディレクトリにも追加する必要があります。
PHPMailerAutoload
はclass.phpmailer.php
と同じフォルダーにある必要があります
これは、私がこれを想定しているPHPMailerAutoload
コードです。
$filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';