Ну, я пытаюсь отправить электронное письмо с помощью сервера smtp с моего хоста (hosting2go), и в соответствии с одним из их FAQ я должен сначала выполнить проверку подлинности с помощью pop3, он должен получить почту, прежде чем я смогу попытаться подключиться к smtp-сервер, и вот что я сделал (я думаю), но, к сожалению, он по-прежнему отключает меня от smtp-сервера по какой-то причине, еще более запутанный (если я правильно понял), он сообщает мне, что клиент запрашивает закрыть соединение.PHPMailer не может отправлять электронную почту, клиент закрывает соединение?
Вот мой 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: QUIT
Connection: closed
SMTP connect() failed.
Mailer Error: SMTP connect() failed.
Это client-> SERVER: QUIT путает меня, но я не мог понять это правильно , Странная вещь (или это?), Что функция mail() по умолчанию в php работает отлично. Но я не хочу использовать эту функцию, поскольку она будет использоваться для информационных бюллетеней и так хорошо (не самая важная часть). Что это за функция, отличная от того, что я здесь делаю?
Update:
Да, я смотрел в ответ, который я получил от 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) с тем же результатом.
Update 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!
И я получил mail совершенно нормально.
Спасибо за любую помощь.
P.S. Я не против, если вы попытаетесь указать мне направление, а не набирать все это для меня, я действительно хотел бы больше, если бы вы указали мне направление, так как я хочу знать, как это работает и почему это происходит не работа.
с TLS вам нужно отправить сертификат, попробуйте порт 587 – volkinc
К сожалению, мой хост не имеет этого порта, но я все равно попробовал, и это ответ; runningConnection: открытие для xxx.hosting2go.nl:587, t = 300, opt = array() SMTP ERROR: Не удалось подключиться к серверу: соединение отклонено (111) Ошибка SMTP connect(). Ошибка Mailer: Ошибка SMTP connect(). , Смешно, что функция mail() по умолчанию работает, поэтому я могу использовать ее, но я знаю, что это не лучшая вещь для использования для почты. –
Mail() просто отправляется на ваш локальный почтовый сервер, поэтому он просто не работает позже. – Synchro