проблема отправки почты с PHPMailer на экземпляр AWS AMI - PullRequest
0 голосов
/ 04 сентября 2018

Я довольно новичок в UNIX, пришедший из Windows. Я создал экземпляр на Amazon EC2 и установил apache, PHP и MySQl. Я успешно загрузил файлы для сайта PHP. Все работает хорошо, за исключением того, что у меня проблема с отправкой писем из контактной формы.

Я прошел учебник по AWS здесь: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-php.html

Я успешно установил composer и запустил его в Putty, и я вижу, что каталог vendor создан и файлы phpmailer загружены.

структура сайта выглядит так:

html
test_mail.php
--vendor
----bin
----composer
----phpmailer
----autoload.php

Я попытался использовать пример сценария электронной почты, включенного в учебник, который выглядит примерно так:

// If necessary, modify the path in the require statement below to refer to the 
// location of your Composer autoload.php file.
require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;

// Instantiate a new PHPMailer 
$mail = new PHPMailer;

// Tell PHPMailer to use SMTP
$mail->isSMTP();

$mail->SMTPDebug = 2;

// Replace sender@example.com with your "From" address. 
// This address must be verified with Amazon SES.
$mail->setFrom('sender@example.com', 'Sender Name');

но я получаю следующую ошибку:

Fatal error: Uncaught Error: Class 'PHPMailer\PHPMailer\PHPMailer' not found in /var/www/testSite/html/test_mail.php:10 Stack trace: #0 {main} thrown in /var/www/testSite/html/test_mail.php on line 10

строка 10 -

$mail = new PHPMailer;

так что я озадачен тем, в чем проблема. Похоже, что необходимые файлы PHPMailer были созданы корректно компоновщиком, и путь к vendor \ autoload.php должен быть правильным.

Возможно ли, что в настройке сервера что-то пропущено?

любые предложения с благодарностью приняты.

David

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Спасибо, Лоуренс, за то, что указал мне правильное направление ... Проблема была, как вы указали, с используемой версией phpmailer.

когда я изменил composer.json для этого проекта на

{
    "require": {
         "phpmailer/phpmailer":"~6.0"   
    }
}

и запустил композитор, обновление моих скриптов теперь выполняется (в основном) успешно.

Похоже, что приведенный в документации AWS пример неверен, так как в нем говорится, что нужно использовать phpmailer 5.2, но предоставленный им скрипт работает только в версии 6.

спасибо!

Дэвид

0 голосов
/ 04 сентября 2018

AWS Больше не имеет автозагрузки, и 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("xxxxxx@xxxxx.com");
        $mail->Subject = "Test";
        $mail->Body = "hello";
        $mail->AddAddress("xxxxxx@xxxxx.com");

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