PHPMailer не может отправлять электронные письма на живой сервер - PullRequest
0 голосов
/ 23 января 2020

Я полагаю, что этот вопрос задавался ранее, но я не мог найти решение этой проблемы.

Я использую PHPMailer для обработки электронной почты на веб-сайте. На localhost все работает нормально, но на живом сервере это не работает. Вот мой код:

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

$mail->IsSMTP();
$mail->Host='smtp.gmail.com';
$mail->Port=587;
$mail->SMTPAuth=true;
$mail->SMPTSecure='tls';
$mail->SMTPDebug = 3;
$mail->Username='*********';
$mail->Password='*********';

$mail->setFrom('*********', '********* Booking', 0);
$mail->addAddress('*********');

$name = "First Name :" . $_POST['firstname'] . "<br>";
$email = "Email :" . $_POST['email'] . "<br>";
$number = "Contact Number :" . $_POST['number'] . "<br>";
$message = "message :" . $_POST['message'] . "<br>";
$truck = "Truck Selected :" . $_POST['item'] . "<br>";


$mail->isHTML(true);
$mail->Subject='********* Booking';
$mail->Body= "$name $email $number $message $truck";


if(!$mail->send()) {
  echo 'Message was not sent.';
  echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
  header('Location: /index.php');
  echo 'Message was sent.';
  exit;
}

Отправка электронной почты на действующий сервер с использованием вышеуказанного кода приводит к следующему:

2020-01-22 07:51:48 Connection: opening to smtp.gmail.com:587, timeout=300, options=array ()
2020-01-22 07:51:48 Connection failed. Error #2: stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: unable to connect to smtp.gmail.com:587 (Connection refused) [/websites/cv/*********/phpmailer/class.smtp.php line 299]
2020-01-22 07:51:48 SMTP ERROR: Failed to connect to server: Connection refused (111)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Message was not sent.Mailer error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Однако, если я отключу $mail->IsSMTP();, что некоторые люди предположили, что ошибка не отображается, но электронные письма не отправляются / не принимаются.

Что я пробовал:

  • Использование ssl, порт 465
  • Включил менее защищенные приложения при отправке электронной почты
  • Свяжитесь с моим хостом, спросите, заблокирован ли какой-либо из портов, они сказали, что они не
  • Убедитесь, что openssl был active
  • Убедитесь, что учетные данные для входа в систему верны

После выполнения всех этих действий все еще говорится, что соединение при использовании SMTP отклонено. Кто-нибудь знает, что может быть причиной этого?

Ответы [ 2 ]

1 голос
/ 23 января 2020

Это похоже на проблему с сетью / системным администратором, а не на проблему с PHPMailer. Попробуйте

telnet smtp.gmail.com 587  // host and port

в консоли для проверки соединения. Если все работает нормально, следует написать сообщение типа «ESMTP MAIL Service ready». В противном случае этот сервер блокирует ваш.

0 голосов
/ 23 января 2020

Пожалуйста, добавьте класс smtp в ваш файл или используйте этот код и измените учетные данные соответственно.

include_once('class.phpmailer.php');

 require_once('class.smtp.php');

$name = strip_tags($_POST['full_name']);
$email = strip_tags ($_POST['email']);
$msg = strip_tags ($_POST['description']);

$subject = "Contact Form from DigitDevs Website";

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
//$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "info@example.com"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

$mail->From = $email;
$mail->FromName = $name;

$mail->AddAddress('info@example.com', 'Information'); 
$mail->AddReplyTo($email, 'Wale');

$mail->IsHTML(true);

$mail->Subject = $subject;

$mail->Body    =  $msg;
$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;
exit;
}
 echo 'Message has been sent';
...