PHPMailer не работает: есть ли новый способ сделать это? - PullRequest
0 голосов
/ 02 июня 2018

Я следовал всем инструкциям в этом вопросе:

SMTP-соединение () не удалось PHPmailer - PHP

Но все же мне так и не удалось заставить работать PHPMailer,Я искал в другом месте - никаких решений.

Вы можете просмотреть результаты здесь: https://unidrones.co.za/JuneSecond

Когда я пытаюсь отправить тестовое электронное письмо с использованием учетных данных учетной записи Gmail, он возвращает «SMTP-соединение () Ошибка "ошибка.

Я использую этот код шаблона:

<?php
require 'PHPMailerAutoload.php';
if(isset($_POST['send']))
{
$email = $_POST['email'];
$password = $_POST['password'];
$to_id = $_POST['toid'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $email;
$mail->Password = $password;
$mail->addAddress($to_id);
$mail->Subject = $subject;
$mail->msgHTML($message);
if (!$mail->send()) {
$error = "Mailer Error: " . $mail->ErrorInfo;
echo '<p id="para">'.$error.'</p>';
}
else {
echo '<p id="para">Message sent!</p>';
}
}
else{
echo '<p id="para">Please enter valid data</p>';
}
?>

Редактировать: Я не знаю, есть ли новый способ отправки писем через PHP сейчас.Все учебные пособия и уроки, которые я использую, учит этому (например, с использованием библиотеки PHPMailer).

Мне было трудно найти библиотеку PHPMailer, которая включает файл PHPMailerAutoload.php, что заставляет меня думать, что это немногоустарел или устарел, но как еще я буду отправлять электронные письма?Я не знаю.

Ответы [ 3 ]

0 голосов
/ 02 июня 2018
<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;

//$mail->SMTPDebug = 4;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'your gamil id';                 // SMTP username
$mail->Password = 'gmail password';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$mail->setFrom('set from address', 'name');
$mail->addAddress('recipient address', 'Joe User');     // Add a recipient

$mail->addReplyTo('reply address', 'Information');


// $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
0 голосов
/ 02 июня 2018

Причина, по которой вам трудно найти PHPMailerAutoload.php, заключается в том, что она старая и больше не поддерживается. Получите последнюю версию и основывайте свой код на предоставленном примере gmail .Если вы новичок в PHP, научитесь использовать композитор .

Эти три строки противоречат друг другу:

$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';

ssl:// в Host переопределяетtls in SMTPSecure, в результате чего он пытается использовать неявный TLS для порта, ожидающего явный TLS.Либо используйте ssl с портом 465 или tls с портом 587, но не другие комбинации.В любом случае, похоже, что это не ваша проблема.

Поскольку в руководстве по устранению неполадок говорится об этой точной ошибке "SMTP connect () failed":

Эточасто сообщается как проблема PHPMailer, но почти всегда это связано с локальным отказом DNS, блокировкой брандмауэра (например, как это делает GoDaddy) или другой проблемой в вашей локальной сети.Это означает, что PHPMailer не может связаться с SMTP-сервером, который вы указали в свойстве Host, но не говорит точно, почему.

Далее описывается несколько методов, которые вы можете использовать, чтобы попытатьсяточно определить, почему вы не можете подключиться.Удивительные вещи, документация.

Я попробовал вашу форму с некоторыми случайными данными и увидел, что вы не включили в свой вопрос самое важное сообщение об ошибке:

2018-06-02 14:47:25 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
2018-06-02 14:47:25 SMTP connect() failed

Это говорит о том, что ваш интернет-провайдер, вероятно,блокируя исходящий SMTP, поэтому у вас есть свой ответ - возможно, подтвердите, что, используя шаги, предложенные в руководстве (telnet и т. д.), и обратитесь к документации или поддержке вашего провайдера.

У вас также есть серьезное упущение - вы 'не устанавливайте адрес «от»:

$mail->setFrom('myname@gmail.com', 'My Name');

Обратите внимание, что если вы отправляете через gmail, вы можете использовать только адрес своей учетной записи или заданные псевдонимы (заданные в настройках gmail), а не произвольные адреса.

Между тем, это довольно сумасшедшая вещь для реализации, так как у вас все равно есть - зачем кому-то вводить свои учетные данные gmail в такой форме?

0 голосов
/ 02 июня 2018

вы пытались использовать следующий конфиг?

$mail->Host       = 'smtp.gmail.com';
$mail->SMTPSecure = 'ssl';
$mail->Port       = 465;
$mail->CharSet    = 'UTF-8';
...