phpmailer отправляет электронную почту через ssl: срок действия сертификата истек - PullRequest
0 голосов
/ 02 ноября 2018

Я написал новый скрипт php, но у меня возникает проблема, когда я пытаюсь подключиться к серверу, у которого истек срок действия сертификата:

  1. Я могу использовать тот же smtp IP: порт в программе Windows, и она отлично работает.

  2. Я могу использовать его и работать с Thunderbird, но он выдал мне сертификат с истекшим сроком до отправки любой вещи

enter image description here

Код ниже.

<?php
/**
 * Created by PhpStorm.
 * User: n0b0dy
 * Date: 11/1/18
 * Time: 9:40 PM
 */
require("/usr/share/php/libphp-phpmailer/class.phpmailer.php");
require '/usr/share/php/libphp-phpmailer/PHPMailerAutoload.php';
require '/usr/share/php/libphp-phpmailer/autoload.php';
require '/usr/share/php/libphp-phpmailer/class.smtp.php';

$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
/**
$mail->SMTPOptions = array(
   'ssl' => array(
        'verify_peer' => true,
        'verify_depth' => 3,
    )
);
*/
$mail->SMTPDebug = 4; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = 0; // authentication enabled
#$mail->SMTPAutoTLS = false;
$mail->Host = 'ssl://75.101.161.108:465';
$mail->IsHTML(true);
$mail->SetFrom("any@any.com");##### Dont care about email because of problem with connection 
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("any@gmail.com");
if(!$mail->Send())
{
    echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
    echo "Message has been sent";
}
?>

и это проблема для Phpmailer

2018-11-02 06:38:23 Connection: opening to ssl://75.101.161.108:465, timeout=300, options=array (
                                      )
2018-11-02 06:38:24 SMTP ERROR: Failed to connect to server:  (0)
2018-11-02 06:38:24 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting%            

B - pearemail с настройкой smtp и кодом здесь

<?php
require_once "Mail.php";
include('Mail/mime.php');

$html = "TEST";// HTML version of the email
$crlf = "\r\n";
$headers = array('From' => "Test<example@any.com>",'To' => 'any@gmail.com', 'Return-Path' => 'example@any.com', 'Subject' => 'Form Pear Email');
$mime = new Mail_mime($crlf);
$mime->setHTMLBody($html);
$body = $mime->get();
$headers = $mime->headers($headers);
$smtpinfo["host"] = 'ssl://75.101.161.108';
$smtpinfo["port"] = '465';
$smtpinfo["auth"] = "false";
$smtpinfo["socket_options"] = array('ssl' => array('verify_peer_name' => false,'verify_peer' => false,'allow_self_signed' => true));
$smtpinfo["timeout"] = "10";
$smtpinfo["debug"] = "true";
$smtp = Mail::factory('smtp',$smtpinfo);
$mail = $smtp->send('any@gmail.com', $headers, $body);
if (PEAR::isError($mail)) {
echo($mail->getMessage());
} else {
echo("WORKING\n");
}
?>

и связанная с этим проблема,

DEBUG: Send: QUIT

Failed to connect to ssl://75.101.161.108:465 [SMTP: Failed to connect socket: stream_socket_client(): unable to connect to ssl://75.101.161.108:465 (Unknown error) (code: -1, response: )]

я использую openssl с этой командой

openssl s_client -connect 75.101.161.108:465

результат

  CONNECTED(00000003)
140527088361920:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1399:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 176 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1541150392
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---

Так, пожалуйста, кто-нибудь может мне помочь?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 02 ноября 2018

Первый шаг: вы используете старую версию PHPMailer; получить последнюю версию .

Базируйте свой код на предоставленных примерах - в частности, вы должны использовать composer для его загрузки, но со старым кодом вам не нужно загружать классы и автозагрузчик.

Уведомление плохое. Дело не только в том, что срок его действия истек, но и в том, что это несоответствующее имя, срок действия которого истек и не подписан известным ЦС. Это говорит о том, что ваше соединение перехватывается и перенаправляется в другое место, чем вы ожидаете. Это именно то, от чего TLS защищает вас, и он работает как задумано.

Вы не должны отключать проверку сертификата. Выясните, что происходит с вашим соединением (см. Шаги в руководстве по устранению неполадок PHPMailer), и отследите, что ваш провайдер делает с исходящими SMTP-соединениями, затем используйте команды openssl, чтобы проверить полученный сертификат. Мы не можем ничего сделать для вас, так как у вас есть настоящие имена хостов.

...