簡體   English   中英

沒有 Composer 的 PHPMailer 安裝

[英]PHPMailer install without Composer

請原諒我的無知。 我正在嘗試在 Linux 上的 PHP 5.6 下安裝 PHPMailer 6.0.1。 我的 PHP 安裝是遠程的,我通過 FTP 管理我所有網站的 PHP(我通常將軟件包作為 .zip 下載到 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' 語句時,我得到了一個語法錯誤,即意外的 'use' (T_USE) ... 沒有它們,我只能嘗試實例化: $mail = new PHPMailer; 但這失敗了,找不到'類'PHPMailer'

請問我做錯了什么,我怎樣才能做得更好?

這不是 PHPMailer 特有的——它是您使用任何使用命名空間的無數 PHP 包所需要做的。 關於如何使用PHP的文檔use在這里

簡短的版本是,您需要在任何其他腳本之前放置namespaceuse指令,因此如果您簡單地顛倒命令的順序,它應該可以工作:

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

順便說一下,這是 PHPMailer 自述文件中的示例以及 PHPMailer 提供的所有其他示例中使用的順序。 您可能會發現升級指南也很有用。

PHPMailerAutoload.php文件不再存在——作曲家的自動加載器做得更好。 PHPMailer 自己的composer.json文件用於為您的應用程序自己的 Composer 文件解決依賴項和標記兼容性要求,也就是說,它用於告訴您項目的 Composer 文件如何使用 PHPMailer – 但不是您項目的 Composer 文件本身 – 您的每個包負載將有自己的。

在沒有本地 PHP 實例的情況下進行開發是一項艱巨的工作 - 在您的實時服務器上進行開發,我們可以說,“不鼓勵”! 如果您不能直接安裝 PHP,請使用 Docker、VirtualBox 或類似 XAMPP 的完全獨立的東西在容器或 VM 中運行它。

在 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);

修改您的require ,並嘗試像 PHPMailer 的 wiki 所說的那樣設置:

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

維基鏈接

沒有作曲家就無法通過......

警告:要求(src/Exception.php):無法打開流:第 5 行 C:\\xampp\\htdocs\\testtest\\test.php 中沒有這樣的文件或目錄

致命錯誤:require(): Failed opening required 'src/Exception.php' (include_path='C:\\xampp\\php\\PEAR') in C:\\xampp\\htdocs\\testtest\\test.php on line 5

首先創建一個文件夾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*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM