Невозможно аутентифицировать SMTP через PHP - PullRequest
1 голос
/ 13 мая 2019

Я не могу отправлять почту с PHP с помощью PHPMailer.Ранее я пробовал то же самое через VB.NET, и он работал отлично.При попытке выдает ошибку ниже -

2019-05-13 15:15:46 Connection: opening to smtp-gw.abcd.com:25, timeout=300, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),)
2019-05-13 15:15:46 Connection: opened
2019-05-13 15:15:46 SMTP INBOUND: "220 Mail02.abcd.com ESMTP"
2019-05-13 15:15:46 SERVER -> CLIENT: 220 Mail02.abcd.com ESMTP
2019-05-13 15:15:46 CLIENT -> SERVER: EHLO localhost
2019-05-13 15:15:46 SMTP INBOUND: "250-Mail02.abcd.com"
2019-05-13 15:15:46 SMTP INBOUND: "250-8BITMIME"
2019-05-13 15:15:46 SMTP INBOUND: "250-SIZE 104857600"
2019-05-13 15:15:46 SMTP INBOUND: "250 STARTTLS"
2019-05-13 15:15:46 SERVER -> CLIENT: 250-Mail02.abcd.com250-8BITMIME250-SIZE 104857600250 STARTTLS
2019-05-13 15:15:46 CLIENT -> SERVER: STARTTLS
2019-05-13 15:15:46 SMTP INBOUND: "220 Go ahead with TLS"
2019-05-13 15:15:46 SERVER -> CLIENT: 220 Go ahead with TLS
2019-05-13 15:15:46 CLIENT -> SERVER: EHLO localhost
2019-05-13 15:15:46 SMTP INBOUND: "250-Mail02.abcd.com"
2019-05-13 15:15:46 SMTP INBOUND: "250-8BITMIME"
2019-05-13 15:15:46 SMTP INBOUND: "250 SIZE 104857600"
2019-05-13 15:15:46 SERVER -> CLIENT: 250-Mail02.abcd.com250-8BITMIME250 SIZE 104857600
SMTP Error: Could not authenticate.
2019-05-13 15:15:46 CLIENT -> SERVER: QUIT
2019-05-13 15:15:46 SMTP INBOUND: "221 Mail02.abcd.com"
2019-05-13 15:15:46 SERVER -> CLIENT: 221 Mail02.abcd.com
2019-05-13 15:15:46 Connection: closed
SMTP Error: Could not authenticate.
Message could not be sent. Mailer Error: SMTP Error: Could not authenticate.

Вот мой блок кода -

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// Load Composer's autoloader
require '../vendor/autoload.php';

// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
    //Server settings
    $mail->SMTPDebug = 4;                                       // Enable verbose debug output
    $mail->isSMTP();                                            // Set mailer to use SMTP
    $mail->Host       = 'smtp-gw.abcd.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = 'jobnotifier@abcd.com';                     // SMTP username
    $mail->Password   = '';                               // SMTP password
    $mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, `ssl` also accepted
    $mail->Port       = 25;                                    // TCP port to connect to
    $mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Я не совсем уверен, чего мне здесь не хватает.Я знаю, что для аутентификации SMTP-сервера нет пароля.Вы также можете проверить то же самое в коде .NET.Вот мой код из VB.NET

 Dim Smtp_Server As New SmtpClient
            Dim e_mail As New MailMessage()
            Smtp_Server.UseDefaultCredentials = False
            Smtp_Server.Credentials = New Net.NetworkCredential("jobnotifier@abcd.com", "")
            Smtp_Server.Port = 25
            Smtp_Server.EnableSsl = False
            Smtp_Server.Host = "smtp-gw.abcd.com"

Запрос помощи по этому вопросу.

1 Ответ

0 голосов
/ 13 мая 2019

Сервер сообщает, что не поддерживает аутентификацию ни до, ни после STARTTLS, т. Е. AUTH не отображается в списке возможностей сервера ни после одной из команд EHLO.Например, вот что говорит gmail:

250-smtp.gmail.com at your service, [88.184.221.3]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8

Поскольку ваш сервер, похоже, не разрешает аутентификацию (и может быть, ваш VB-скрипт обнаруживает это и не пытается), скажите вашему сценарию неиспользуйте его:

$mail->SMTPAuth   = false;                                   // Enable SMTP authentication
$mail->Username   = '';                     // SMTP username
$mail->Password   = '';                               // SMTP password

Кроме того, почему вы отключаете проверку сертификата TLS?У вас должна быть очень веская причина для этого - а не просто "заставить это работать";если ваша конфигурация TLS не работает, исправьте ее, а не просто подавляйте ошибки.

...