Я получаю сообщение об ошибке 504 при попытке войти на мой почтовый сервер через telnet. Я пробовал порты 25, а также 587. (Маскировка доменов и ips с * s и xs).
>EHLO domain.com
250-************.outlook.office365.com Hello [xx.xx.xx.xx]
250-SIZE 157286400
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250 CHUNKING
> HELP
214-This server supports the following commands:
214 HELO EHLO STARTTLS RCPT DATA RSET MAIL QUIT HELP AUTH BDAT
> AUTH
504 5.7.4 Unrecognized authentication type
[*************.********.****.outlook.com]
> auth
504 5.7.4 Unrecognized authentication type
[*************.********.****.outlook.com]
> AUTH LOGIN
504 5.7.4 Unrecognized authentication type
[*************.********.****.outlook.com]
> auth login
504 5.7.4 Unrecognized authentication type
[*************.********.****.outlook.com]
Я могу сделать это просто отлично, используя phpmailer, хотя!
<?php
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->Host = $host;
$mail->Port = 587;
$mail->SMTPDebug = 2;
$mail->SMTPSecure = "tls";
$mail->SMTPAuth = true;
$mail->Username = $user;
$mail->Password = $password;
$mail->SetFrom($user, "chiliNUT");
$mail->Subject = $subject;
$mail->MsgHTML($content);
$mail->send();
И под капотом для аутенти это делает:
public function Authenticate($username, $password) {
// Start authentication
fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
//...
Как я могу заставить это работать в командной строке?
Это происходит потому, что большинство разумных почтовых серверов не разрешают незашифрованный AUTH — обратите внимание, что список возможностей, который вы получаете от сервера, не включает AUTH — вам сначала нужно вызвать STARTTLS, что PHPMailer делает автоматически. Вы не можете легко сделать это вручную с помощью telnet — используйте команду openssl s_client, чтобы сделать это лучше. В руководстве по устранению неполадок PHPMailer есть пример:
openssl s_client -starttls smtp -connect smtp.outlook.office365.com:587
Других решений пока нет …