web-dev-qa-db-ja.com

ComposerなしのPHPMailerインストール

私の無知を許してください。 PHP 5.6 Linux上のPHPMailer 6.0.1をインストールしようとしています。私のPHPインストールはリモートであり、すべてのWebサイトを管理していますPHP FTP経由(私は通常、パッケージを.zipsとしてWin 10にダウンロードし、展開してからその結果を自分のウェブスペースにFTPで送信します)。

PHPMailerをインストールするさまざまな方法の中で、Composerが推奨されますが、ここで行き詰まります。Composerの説明は、この作業方法には適切ではないようです–インストーラーは「コマンドラインを選択するPHP使用したい)」を求めていますが、PHPがローカルにありません...厄介なことに、 PHPMailerのcomposer.jsonファイルがインストールされて使用されるのを待っていますが、PHPMailerAutoload.phpはありません(これはComposerによって作成されていますか?)

そのため、PHPMailerを手動でインストールしようとしています。結果のディレクトリをダウンロードし、解凍し、FTPアップロードして、PHPMailerフォルダーのウェブスペースに配置します。次に、PHPコードの先頭と関数の外側に以下を挿入します。

require_once 'PHPMailer/src/PHPMailer.php';
require_once 'PHPMailer/src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

「use」ステートメントを使用すると、構文エラーが発生しますnexpected 'use'(T_USE)…それらがないと、インスタンス化しようとします:$ mail = new PHPMailer;しかし、これは「クラス 'PHPMailer'が見つからないため失敗します

何が悪いのですか?どうすればもっとうまくできますか?

4
decomplexity

これはPHPMailerに固有のものではありません-名前空間を使用する無数のPHPパッケージのいずれかで対処する必要があるものです。PHP上のドキュメントuseの使い方は here です。

短いバージョンは、他のスクリプトの前にnamespaceおよびuseディレクティブを配置する必要があるため、コマンドの順序を逆にするだけで機能します。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once 'PHPMailer/src/PHPMailer.php';
require_once 'PHPMailer/src/SMTP.php';

ちなみに、これはreadmeで使用されている順序と、PHPMailerで提供される他のすべての例です。 アップグレードガイド も役立つかもしれません。

PHPMailerAutoload.phpファイルはもう存在しません-composerのオートローダーがはるかに優れた仕事をします。 PHPMailer自身のcomposer.jsonファイルは、依存関係を解決し、アプリ自体の互換性要件にフラグを付けるために使用されますcomposerファイル、つまり、プロジェクトのcomposerファイルに方法を伝えるために使用されますPHPMailerを使用します。ただし、プロジェクトのcomposerファイル自体ではありません。ロードするすべてのパッケージには独自のファイルがあります。

ローカルなしでの開発PHPインスタンスは大変な作業です-ライブサーバーでの開発は、「非推奨」と言えます!インストールできない場合PHP直接、VM VirtualBoxまたは完全に自己完結型のXAMPPのようなものを使用して実行します。

9
Synchro

バージョン6.02では、各phpmailerモジュールに名前空間PHPMailer\PHPMailer宣言が含まれているため、次のように機能します(オートローダーは不要ですが、このルーチンは/srcフォルダーにある必要があります):

include($_SERVER['DOCUMENT_ROOT'].'/path_setup.php');
require_once ($_SERVER['DOCUMENT_ROOT'].'/php/PHPMailer/src/PHPMailer.php');
require_once ($_SERVER['DOCUMENT_ROOT'].'/php/PHPMailer/src/SMTP.php');
require_once ($_SERVER['DOCUMENT_ROOT'].'/php/PHPMailer/src/Exception.php');
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
5
DBStamps

最初にフォルダーsrcを作成し、Exception.php、PHPMailer.php、SMTP.php Liberを作成してから、結果を取得します

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2; // 0 = off (for production use) - 1 = client messages - 2 = client and server messages
$mail->Host = "smtp.gmail.com"; // use $mail->Host = gethostbyname('smtp.gmail.com'); // if your network does not support SMTP over IPv6
$mail->Port = 587; // TLS only
$mail->SMTPSecure = 'tls'; // ssl is depracated
$mail->SMTPAuth = true;
$mail->Username = '@gmail.com';
$mail->Password = '';
$mail->setFrom('@gmail.com', '...');
$mail->addReplyTo('@gmail.com', ' Name');
$mail->addAddress('@gmail.com', '...');
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("Hello test SMTP body"); //$mail->msgHTML(file_get_contents('contents.html'), __DIR__); //Read an HTML message body from an external file, convert referenced images to embedded,
$mail->AltBody = 'HTML messaging not supported';
// $mail->addAttachment('images/phpmailer_mini.png'); //Attach an image file

if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "Message sent!";
}
?>*strong text*
0
Gunnu

作曲家なしでは通用しません...

警告:require(src/Exception.php):ストリームを開くことができませんでした:C:\ xampp\htdocs\testtest\test.phpの5行目にそのようなファイルまたはディレクトリはありません

致命的なエラー:require():5行目のC:\ xampp\htdocs\testtest\test.phpで必要な 'src/Exception.php'(include_path = 'C:\ xampp\php\PEAR')を開けませんでした

0
Gunnu

requireを変更して、PHPMailerのwikiが言うように設定してみてください:

<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;

wikiのリンク

0
David Fornazier