PHPMailer Cli работает, CGI не, почему?

У меня есть две машины с установленными копиями Ubuntu 16.04, php 7 и PHPMailer. Сообщения отправляются через Gmail с использованием ssmtp и связанной с ним заглушки sendmail. Если я запускаю ту же программу (фактически код из учебника в Wiki) из командной строки и cgi (Apache2), командная строка работает, а cgi — нет, и выдает сообщение об ошибке «Ошибка почтовой программы: не удалось создать экземпляр почты функция «.

Пожалуйста, не говорите, что прочитайте руководство по устранению неполадок, которое у меня есть, и я извиняюсь, но небольшая критика это немного загадочно, я не понимаю. (Что-то, что мы все делаем, пытаясь сделать это коротким и простым.)

Однако, если я проверю файл php.ini для обоих, они одинаковы в областях, которые влияют на электронную почту.

Есть ли необходимая разница, которую я пропустил? Что случилось?

<?php

require_once('phpmailer.php');
require_once('exception.php');

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

$bodytext = "This is a test EMail sent from the sever.

Frank\n";

$email = new PHPMailer();
$email->From      = '[email protected]';
$email->FromName  = 'Frank';
$email->Subject   = 'Test Email';
$email->Body      = $bodytext;
$email->AddAddress( '[email protected]' );

return $email->Send();

echo "Done";

?>

Я знаю, что это мусор для CGI, но дело в том, что он должен работать в обоих.

Журнал mail.err показывает

Apr 30 10:14:02 Desktop-Frank sSMTP[5579]: Unable to connect to "smtp.gmail.com" port 597.
Apr 30 10:14:02 Desktop-Frank sSMTP[5579]: Cannot open smtp.gmail.com:597

Что коррелирует с сообщением об ошибке переднего конца.

Я предполагаю, что часть данных отсутствует или отличается между двумя методами. Возвращенное сообщение об ошибке из ssmtp неправильно понимается.

Я даже пытался обновить php.ini, чтобы дать полностью разрешенный путь к двоичному заглушке sendmail.

Кто-нибудь может помочь мне решить это?

Спасибо Фрэнк

ОБНОВЛЕНИЕ: рабочий код в обеих средах

Я до сих пор не понимаю, почему оригинальный код не работал в среде cgi, но есть хорошая новость: следующие программы работают как в cgi, так и в cli!

Не забудьте поместить phpmailer.php, exception.php и smtp.php в / usr / share / php / и посмотреть имена файлов.

<?php

require_once('phpmailer.php');
require_once('exception.php');
require_once('smtp.php');

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

$bodytext = "This is a test EMail sent from the sever.";

$email = new PHPMailer();
$email->From      = '[email protected]'; # replaced by google with Username
$email->FromName  = 'Appears in From ahead of your gmail address';
$email->Sender    = '[email protected]'; # not visible to recipient
$email->Subject   = 'Appears in the subject field';
$email->Body      = $bodytext;
$email->AddAddress( '[email protected]' );
$email->AddAttachment( '/fullpath/file.name' );
$email->isSMTP();
$email->SMTPAuth = true;
$email->SMTPDebug = 4; # lots of debug 0 for production
$email->SMTPSecure = 'tls';
$email->Port = 587;
$email->Username = 'gmail email address';
$email->Password = 'gmail password';
$email->Host = 'smtp.gmail.com';

echo "<table border=1>\n";
echo "<tr><td>Name</td><td>Value</td></tr>\n";
foreach($email as $key=>$item) {
echo "<tr><td>".$key."</td><td>".$item."</td></tr>\n";
}
echo "</table>";

return $email->Send();

echo "Done";

?>

Спасибо всем особенно Synchro за его терпение.

Фрэнк

-1

Решение

включить SMTP безопасный вариант, а также изменить порт на 465.

$mail->SMTPSecure = 'ssl';
$mail->Port       =  465;                    // set the SMTP port

Установить пароль почты SMTP

$mail->Password   = "mailpassword";  // SMTP password
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]