为啥 PHPMailer 无法连接到我的 SMTP 服务器

Posted

技术标签:

【中文标题】为啥 PHPMailer 无法连接到我的 SMTP 服务器【英文标题】:Why does PHPMailer fail to connect to my SMTP server为什么 PHPMailer 无法连接到我的 SMTP 服务器 【发布时间】:2021-09-18 09:55:02 【问题描述】:

PHPMailer 版本:6.5.0

当我尝试将我的 phpMailer 脚本与我的 SMTP 服务器连接时,我收到了这个错误:

SSL loaded 2021-07-07 20:57:08 Connection: opening to mail.solninjaa.com:587, timeout=300, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),)
2021-07-07 20:57:08 Connection failed. Error #2: stream_socket_client(): php_network_getaddresses: getaddrinfo failed: No such host is known. [C:\xampp\htdocs\php\vendor\phpmailer\phpmailer\src\SMTP.php line 388]
2021-07-07 20:57:08 Connection failed. Error #2: stream_socket_client(): unable to connect to mail.solninjaa.com:587 (php_network_getaddresses: getaddrinfo failed: No such host is known. ) [C:\xampp\htdocs\php\vendor\phpmailer\phpmailer\src\SMTP.php line 388]
2021-07-07 20:57:08 SMTP ERROR: Failed to connect to server: php_network_getaddresses: getaddrinfo failed: No such host is known. (0)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

第一个“加载 SSL”是我的脚本检查它是否启用了 OpenSSL。

我的邮件服务器是:

mail.solninjaa.com

注意:“mail.solninjaa.com”也是 IMAP 和 POP3 地址。

我运行了一个命令来测试邮件服务器是否真的是邮件服务器。 它回来说不是,这很奇怪,因为我可以看到它在我的 Webmin / Virtualmin 仪表板中运行(它们就像 CPanel)。这可能是问题所在,但我对此表示怀疑。我想我可能会输入错误的端口(或类似的东西)。

我只是觉得这值得一提。

我的 PHPMailer 脚本是:

<?php

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


/* Composer autoload.php file includes all installed libraries. */
require '.\vendor\autoload.php';


$mail = new PHPMailer(TRUE);


$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

$secretKey = "pleasedontsharethis";
$responseKey = $_POST['g-recaptcha-response'];
$userIP = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey&remoteip=$userIP";

$response = file_get_contents($url);
$response = json_decode($response);
    
    
echo (extension_loaded('openssl')?'SSL loaded':'SSL not loaded')."\n";

    if ($response->success)
    
        try 
   
            $mail->setFrom('otheremail@gmail.com', 'SolninjaA');
            $mail->addAddress('email@gmail.com', 'Name');
            $mail->Subject = 'Testing PHPMailer 2';

            $mail->msghtml(file_get_contents('email_template.html'), __DIR__);

            $mail->AltBody = 'There was a malfunction with sending the HTML. Sorry.';
            // $mail->isSMTP();
            // $mail->Port = 587;
            // $mail->SMTPAuth = TRUE;

            // TESTING CUSTOM STMP SERVERS
            $mail->isSMTP();
            $mail->Host = 'mail.solninjaa.com';
            $mail->SMTPAuth = TRUE;
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
            $mail->Username = 'noreply@solninjaa.com';
            $mail->Password = 'mypassword';
            $mail->Port = 587;
            $mail->SMTPAutoTLS = false;
            $mail->SMTPDebug = 3;

               /* Disable some SSL checks. */
            $mail->SMTPOptions = array(
                'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
                )
            );
            
            /* Finally send the mail. */
            $mail->send();
         
         catch (Exception $e)
         
            echo $e->errorMessage();
         
         catch (\Exception $e)
         
            echo $e->getMessage();
         
         echo "Thank You!" . " -" . "<a href='/dist' style='text-decoration:none;color:#ff0099;'> Return Home</a> we are Automatically redirecting you in 5 seconds.";
         header("Refresh:5; url=/dist");
        
    else 
        echo "<span style='text-decoration:none;color: red;'>Sorry, something went wrong... Invalid Captcha, please try again.</span> <a href='/dist' style='text-decoration:none;color:#ff0099;'> Return Home</a> we are Automatically redirecting you in 5 seconds.";
        header("Refresh:5; url=/dist");
    

?>

注意:我的原始脚本已将 XOAUTH2 设置注释掉(// 、#),但出于安全原因,我删除了这些设置。

注意:我的脚本还需要 Google reCaptcha,这就是为什么会有额外的变量。

另外,如果我的自定义 SMTP 服务器无法正常工作,我可以创建一个 Google Workspace 帐户并使用该帐户获取 XOAUTH2 令牌吗?它会显示我的自定义电子邮件地址吗? (noreply@solninjaa.com)

【问题讨论】:

【参考方案1】:

它不能解析mail.solninjaa.com,我也不能。

你至少有一个 DNS 问题。

【讨论】:

感谢@Bib 的回答!我将不得不解决我的 DNS 问题。您是否介意确认如果我创建了一个 Google Workspace 帐户并使用该帐户创建了 XOAUTH2 令牌,我是否能够从该自定义地址发送电子邮件? (noreply@solninjaa.com) @Bib 不在乎-v,只是试着帮助别人

以上是关于为啥 PHPMailer 无法连接到我的 SMTP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

PHPMailer:SMTP错误:10051无法连接到服务器:尝试对无法访问的网络执行套接字操作

PHPMailer无法连接到SMTP主机

SMTP 错误:无法连接到服务器:php_network_getaddresses:getaddrinfo 失败:不知道这样的主机 | PHP 邮件程序 6.5

PHPMailer Gmail 登录失败

PHPMailer 使用 SMTP 身份验证发送电子邮件,但 Gmail 仍然声称它无法验证发件人

Spring Boot - 无法连接到 SMTP 主机:smtp.gmail.com,端口:25,响应:421