PHPMailer: я подключен к внешнему SMPT или нет? - PullRequest
0 голосов
/ 04 февраля 2020

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

2020-02-03 13:39:00 Connection: opening to some-external.smtp.host:25, timeout=300, options=array()
2020-02-03 13:39:00 Connection: opened
2020-02-03 13:39:00 SERVER -> CLIENT: 220-my-own.domain.com ESMTP Exim 4.92 #2 Mon, 03 Feb 2020 13:39:00 +0000 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
2020-02-03 13:39:00 CLIENT -> SERVER: EHLO url-at-my-own.domain.com
2020-02-03 13:39:00 SERVER -> CLIENT: 250-url-at-my-own.domain.com Hello url-at-my-own.domain.com [31.186.175.24]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2020-02-03 13:39:00 CLIENT -> SERVER: MAIL FROM:<info@domain.com>
2020-02-03 13:39:00 SERVER -> CLIENT: 250 OK
2020-02-03 13:39:00 CLIENT -> SERVER: RCPT TO:<recipient@hotmail.com>
2020-02-03 13:39:00 SERVER -> CLIENT: 550-Please turn on SMTP Authentication in your mail client. 550-(test.admin.mijnvolksuniversiteit.nl) [31.186.175.24]:50402 is not550 permitted to relay through this server without authentication.
2020-02-03 13:39:00 SMTP ERROR: RCPT TO command failed: 550-Please turn on SMTP Authentication in your mail client. 550-(url-at-my-own.domain.com) [31.186.175.24]:50402 is not550 permitted to relay through this server without authentication.
2020-02-03 13:39:00 CLIENT -> SERVER: QUIT
2020-02-03 13:39:00 SERVER -> CLIENT: 221 url-at-my-own.domain.com closing connection
2020-02-03 13:39:00 Connection: closed

Теперь проблема «очевидна», сервер запрашивает у меня аутентификацию, но это не проблема под рукой Вот. Важно знать, действительно ли я подключен к «some-external.smtp.host» или к чему-то на my-own.domain.com.

Я имею дело с внешней стороной, которая управляет «some-external.smtp.host», который утверждает, что мне не нужно проходить аутентификацию, поскольку IP-адрес сервера «my-own.domain.com» занесен в белый список.

В частности, они утверждают, что я, кажется, подключен к локальному SMTP-серверу из-за этих фрагментов в строке 3 'SERVER -> CLIENT: 220-my-own.domain.com ESMTP Exim', содержащих мое собственное доменное имя а не их.

Я полагаю, потому что в строке 1 определенно указано, что установлено соединение с some-external.smtp.host, а в строке 2 указано, что соединение было успешно установлено, что сообщение 220 в строке 3 внешний хост (он же SERVER) обращается к локальному серверу (он же CLIENT) по его имени.

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

Код, используемый для запуска PHPMailer, выглядит следующим образом:

$mail = new PHPMailer(true);
                    try {
                        //Server settings
                        $mail->SMTPDebug = SMTP::DEBUG_CONNECTION;
                        $mail->isSMTP();
                        $mail->Host       = $this->vu['setting_mailrelay_host'];
                        if($this->vu['setting_mailrelay_username'] != '' && $this->vu['setting_mailrelay_password'] != '') {
                            $mail->SMTPAuth   = true;
                            $mail->Username   = $this->vu['setting_mailrelay_username'];
                            $mail->Password   = $this->vu['setting_mailrelay_password'];
                        }
                        $mail->SMTPSecure = $this->vu['setting_mailrelay_security'];
                        if($this->vu['setting_mailrelay_security'] == '') {
                            $mail->SMTPAutoTLS = false;
                        }
                        $mail->Port       = $this->vu['setting_mailrelay_port'];

                        //Recipients
                        $mail->setFrom($this->vu['email'], $this->vu['name']);
                        $mail->addAddress($email_to, trim($person['last_name']));
                        $mail->addReplyTo($this->vu['email'], $this->vu['name']);

                        // Content
                        $mail->isHTML(true);
                        $mail->Subject = $subject;
                        $mail->Body    = $mailBody;
                        $mail->AltBody = $message_plain;

                        $mail->send();
                        echo 'Message has been sent';
                    } catch (Exception $e) {
                        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
                    }

SMTPAuth в моем случае - false, а имя пользователя и пароль - emtpy, поскольку внешняя сторона настаивает на том, что мне не нужно проходить аутентификацию.

SMTPSecure пуст, а SMTPAutoTLS - false, поскольку внешняя сторона настаивает на том, что шифрование должно быть выключенным.

Обновление: Если я включаю TLS, журнал выглядит следующим образом:

2020-02-04 13:08:11 Connection: opening to some-external.smtp.host:25, timeout=300, options=array()
2020-02-04 13:08:11 Connection: opened
2020-02-04 13:08:11 SERVER -> CLIENT: 220-my-own.domain.com ESMTP Exim 4.92 #2 Tue, 04 Feb 2020 13:08:11 +0000 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
2020-02-04 13:08:11 CLIENT -> SERVER: EHLO url-at-my-own.domain.com
2020-02-04 13:08:11 SERVER -> CLIENT: 250-my-own.domain.com Hello url-at-my-own.domain.com [31.186.175.24]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2020-02-04 13:08:11 CLIENT -> SERVER: STARTTLS
2020-02-04 13:08:11 SERVER -> CLIENT: 220 TLS go ahead
2020-02-04 13:08:11 Connection failed. Error #2: stream_socket_enable_crypto(): Peer certificate CN=`my-own.domain.com' did not match expected CN=`some-external.smtp.host' [/home/tstvubo/public_html/vendor/phpmailer/phpmailer/src/SMTP.php line 429]
SMTP Error: Could not connect to SMTP host.
2020-02-04 13:08:11 CLIENT -> SERVER: QUIT
2020-02-04 13:08:12
2020-02-04 13:08:12
2020-02-04 13:08:12 Connection: closed

Это заставляет сервер жаловаться на сертификаты на обеих сторонах не совпадают ну и ладно ... если я настрою код вызова PHP для применения:

$mail->SMTPOptions = ['ssl' => [
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
    ]
];

Результат будет выглядеть следующим образом:

2020-02-04 13:12:51 Connection: opening to some-external.smtp.host:25, timeout=300, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),)
2020-02-04 13:12:51 Connection: opened
2020-02-04 13:12:51 SERVER -> CLIENT: 220-my-own.domain.com ESMTP Exim 4.92 #2 Tue, 04 Feb 2020 13:12:51 +0000 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
2020-02-04 13:12:51 CLIENT -> SERVER: EHLO url-at-my-own.domain.com
2020-02-04 13:12:51 SERVER -> CLIENT: 250-my-own.domain.com Hello url-at-my-own.domain.com [31.186.175.24]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2020-02-04 13:12:51 CLIENT -> SERVER: STARTTLS
2020-02-04 13:12:51 SERVER -> CLIENT: 220 TLS go ahead
2020-02-04 13:12:51 CLIENT -> SERVER: EHLO url-at-my-own.domain.com
2020-02-04 13:12:51 SERVER -> CLIENT: 250-my-own.domain.com Hello url-at-my-own.domain.com [31.186.175.24]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250 HELP
2020-02-04 13:12:51 CLIENT -> SERVER: MAIL FROM:<info@domain.com>
2020-02-04 13:12:52 SERVER -> CLIENT: 250 OK
2020-02-04 13:12:52 CLIENT -> SERVER: RCPT TO:<recipient@hotmail.com>
2020-02-04 13:12:52 SERVER -> CLIENT: 550-Please turn on SMTP Authentication in your mail client. 550-(url-at-my-own.domain.com) [31.186.175.24]:36810 is not550 permitted to relay through this server without authentication.
2020-02-04 13:12:52 SMTP ERROR: RCPT TO command failed: 550-Please turn on SMTP Authentication in your mail client. 550-(url-at-my-own.domain.com) [31.186.175.24]:36810 is not550 permitted to relay through this server without authentication.
2020-02-04 13:12:52 CLIENT -> SERVER: QUIT
2020-02-04 13:12:52 SERVER -> CLIENT: 221 my-own.domain.com closing connection
2020-02-04 13:12:52 Connection: closed

И теперь он запрашивает аутентификацию, пока снова.

Это приводит к следующим выводам:

  • Я наиболее определенно подключен к внешнему SMTP-серверу.

  • Несмотря на то, что по заявлению внешней стороны, простой белый список IP-адресов не собирается его сокращать.

  • Мне нужны либо некоторые учетные данные для аутентификации, либо надлежащий сертификат для связи.

Вердикт?

1 Ответ

0 голосов
/ 04 февраля 2020

Всегда действительно очень хорошая идея прочитать сообщение об ошибке , особенно этот бит:

Peer certificate CN='my-own.domain.com' did not match expected CN='some-external.smtp.host'

Это означает, что, хотя вы можете запрашивать подключение к some-external.smtp.host (потому что это то, что вы указали в свойстве Host), вы фактически подключены к my-own.domain.com.

Обычно это происходит из-за перенаправления правил брандмауэра SMTP traffi c - это также означает, что TLS делает в точности , для чего он был предназначен, и предупреждает вас, что ваш трафик c эффективно подвергается атаке «человек посередине» ( собственный брандмауэр), поэтому отключение проверки сертификатов, как обычно, плохая идея. Эта точная проблема описана в руководстве по устранению неполадок PHPMailer .

Так что они говорят, что это правильно; это не они делают это - это ваш почтовый сервер, который запрашивает аутентификацию, а не их.

...