如何在没有作曲家的情况下使用PHPMailer?

时间:2018-01-06 15:04:17

标签: php github phpmailer

我想将最新的PHPMailer库与require_once()一起使用,而不是使用Composer。我喜欢纯粹的xcopy部署,而且操作简单。

这是我尝试做的事情:

require_once("src/PHPMailer.php");
$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2;
$mail->Host = "smtp.gmail.com"; 
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body"); 
$mail->AltBody = 'HTML messaging not supported';

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

我收到错误消息:Fatal error: Class PHPMailer not found in [....]\EmailTester.php on line 21

第21行是:$mail = new PHPMailer;

这一行只是我的一个猜测:require_once("src/PHPMailer.php"); - 显然我需要包含一些文件或文件,但我无法说明哪一个。

我在gmail example on github工作,这也不包含在zip下载中。但我可以在github中导航到它。在该示例文件中,它开头如下:

use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';
$mail = new PHPMailer;

我在zip下载中看不到autoload.php文件,在谷歌搜索后我看到这意味着使用Composer。但必须有一些方法来简单地做一个包含并获取我需要的文件。

有些事情让我对这个PHPMailer库感到困惑,并且通常可能 github

  1. 当我从GitHub下载PHP Mailer时,为什么下载的zip文件中没有包含这么多列出的文件和文件夹?
  2. enter image description here

    1. 为什么他们引用了zip下载中不存在的autoload.php
    2. 显然我不了解github的一些内容,但为什么不提供一个工作代码示例,而不是引用下载中不存在的依赖项,迫使人们在别处找到它并希望他们能够想到如何回来并正确插入?
    3. 在这个名为Send Emails with PHP & Gmail的YouTube视频中,他下载了我从同一个地方下载的同一个zip,但他的zip包含不同的文件,包括PHPMailerAutoload.php。为什么我得到的文件与他得到的完全不同?该视频于2017年3月4日发布 - 所以,不到1年前 - 从那以后真的发生了很大变化吗?
    4. 总结:如何让PHPMailer在没有外部依赖和安装(如 Composer )的情况下工作,而是使用require_once()来获取我需要的东西?

3 个答案:

答案 0 :(得分:13)

这里是完整的工作示例(虽然你看到一些必须定义和设置的变量):

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 = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test 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!";
}

答案 1 :(得分:0)

这对我有用,我也从该地址下载了phpmailer

https://sourceforge.net/projects/phpmailer/

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

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

答案 2 :(得分:0)

PHP Mailer 原始来源: PHP Mailer In gitHub

// for use PHP Mailer without composer : 

// ex. Create a folder in root/PHPMAILER
// Put on this folder this 3 files find in "src" 
// folder of the distribution : 
// PHPMailer.php , SMTP.php , Exception.php
  
  // include PHP Mailer
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;
  include dirname(__DIR__) .'/PHPMAILER/PHPMailer.php';
  include dirname(__DIR__) .'/PHPMAILER/SMTP.php';
  include dirname(__DIR__) .'/PHPMAILER/Exception.php';

  // i made a function 

   /*
    *
    * Function send_mail_by_PHPMailer($to, $from, $subject, $message);
    * send a mail by PHPMailer method
    * @Param $to -> mail to send
    * @Param $from -> sender of mail
    * @Param $subject -> suject of mail
    * @Param $message -> html content with datas
    * @Return true if success / Json encoded error message if error 
    * !! need -> classes/Exception.php - classes/PHPMailer.php - classes/SMTP.php
    *
    */
    function send_mail_by_PHPMailer($to, $from, $subject, $message){

          // SEND MAIL by PHP MAILER
          $mail = new PHPMailer();
          $mail->CharSet = 'UTF-8';
          $mail->isSMTP(); // Use SMTP protocol
          $mail->Host = 'your_host.com'; // Specify  SMTP server
          $mail->SMTPAuth = true; // Auth. SMTP
          $mail->Username = 'my_mail@your_host.com'; // Mail who send by PHPMailer
          $mail->Password = 'your_passord_of_your_box'; // your pass mail box
          $mail->SMTPSecure = 'ssl'; // Accept SSL
          $mail->Port = 465; // port of your out server
          $mail->setFrom($from); // Mail to send at
          $mail->addAddress($to); // Add sender
          $mail->addReplyTo($from); // Adress to reply
          $mail->isHTML(true); // use HTML message
          $mail->Subject = $subject;
          $mail->Body = $message;

          // SEND
          if( !$mail->send() ){

              // render error if it is
              $tab = array('error' => 'Mailer Error: '.$mail->ErrorInfo );
              echo json_encode($tab);
              exit;
          }
          else{
              // return true if message is send
              return true;
          }

    }
    /*
    *
    * END send_mail_by_PHPMailer($to, $from, $subject, $message)
    * send a mail by PHPMailer method
    *
    */
  
    // use function :
    send_mail_by_PHPMailer($to, $from, $subject, $message);