PHPMailer не может отправить письмо, клиент закрывает соединение?

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

Вот мой PHP-код:

 echo 'running';
require '../PHPMailerAutoload.php';

$pop3mail = imap_open('{XXXX.hosting2go.nl:110/pop3}', '[email protected]', 'XXX');

// grab a list of all the mail headers
$headers = imap_headers($pop3mail);

// grab a header object for the last message in the mailbox
$last = imap_num_msg($pop3mail);
$header = imap_header($pop3mail, $last);

// grab the body for the same message
echo $body = imap_body($pop3mail, $last);$mail = new PHPMailer;

$mail->SMTPDebug = 3;
$mail->Debugoutput = 'html';                              // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->SMTPSecure = 'tls';                            // zet SMTP naar ssl
$mail->Host = 'XXX.hosting2go.nl';  // Specify main and backup SMTP servers
$mail->Port = 25;                                    // TCP port to connect to
$mail->Username = "[email protected]";                 // SMTP username
$mail->Password = 'XXXX';                           // SMTP password$mail->From = '[email protected]';
$mail->FromName = 'Werktuigenvereniging Ruinerwold';$mail->AddAddress("[email protected]");//$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = "testing";
$mail->Body    = "testing";

//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
imap_close($pop3mail);

И это ответ, который я получаю:

runningConnection: opening to xxx.hosting2go.nl:25, t=300, opt=array ()
Connection: opened
SERVER -> CLIENT: 220 xxx.hosting2go.nl ESMTP
CLIENT -> SERVER: EHLO wtvruinerwoldnieuw.nl
SERVER -> CLIENT: 250-xxx.hosting2go.nl250-STARTTLS250-PIPELINING250     8BITMIME
CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 220 ready for tls
CLIENT -> SERVER: QUITConnection: closed
SMTP connect() failed.
Mailer Error: SMTP connect() failed.

Этот CLIENT-> SERVER: QUIT сбивает меня с толку, но я не могу понять это правильно.
Странная вещь (или это?) В том, что встроенная в php функция mail () работает нормально. Но я не хочу использовать эту функцию, поскольку она будет использоваться для информационных бюллетеней и тому подобного (не самая важная часть). Чем эта функция отличается от того, что я делаю здесь?

Обновить:

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

 If the SMTP client decides that the level of authentication or
privacy is not high enough for it to continue, it SHOULD issue an
SMTP QUIT command immediately after the TLS negotiation is complete.

источник: https://www.ietf.org/rfc/rfc2487.txt

Но это проблема сервера или клиента сейчас. Я также попытался использовать localhost (поскольку сервер smtp, который я пытаюсь использовать, находится на том же сервере, где размещен мой веб-сайт) (127.0.0.1) с тем же результатом.

Обновление 2 # (нашел решение, но так странно):
https://stackoverflow.com/a/12410579/4564466

Комментируя:

$mail->isSMTP();

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

Ответ был следующим:

runningServer -> Client: +OK Hello there. Server -> Client: +OK Password required. Server -> Client: +OK logged in. Message sent!

И я получил почту совершенно нормально.

Спасибо за любую помощь.

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

1

Решение

То, что вы описываете, называется POP-before-SMTP. Я не видел, чтобы кто-нибудь использовал его более 20 лет!

Не беспокойтесь о своем собственном коде — PHPMailer имеет встроенную поддержку для него. Проверять, выписываться этот пример кода.

Тем не менее, я бы порекомендовал найти провайдера, который немного меньше каменного века.

1

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

Ваш сервер пытается перевести вас в режим TLS с помощью STARTTLS. Вы должны настроить PHPMailer для включения этого режима. Я думаю, что вам нужно:

$mail->SMTPSecure = 'tls';
0

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