phpmailer不工作,错误日志:未捕获phpmailer\phpmailer\Exception:SMTP错误:无法连接到SMTP主机

phpmailer不工作,错误日志:未捕获phpmailer\phpmailer\Exception:SMTP错误:无法连接到SMTP主机,php,forms,phpmailer,Php,Forms,Phpmailer,最近我建立了一个网站,一切都很顺利,但联系方式是不发送电子邮件。我使用jquery、php和PHPMailer php库的组合来实现这一点。请帮帮我。代码如下: php位于文件夹php中名为contact.php的单独文件中: <?php require 'src/Exception.php'; require 'src/PHPMailer.php'; require 'src/SMTP.php'; use PHPMailer\PHPMailer

最近我建立了一个网站,一切都很顺利,但联系方式是不发送电子邮件。我使用jquery、php和PHPMailer php库的组合来实现这一点。请帮帮我。代码如下:

php位于文件夹php中名为contact.php的单独文件中:

<?php 
    require 'src/Exception.php';
    require 'src/PHPMailer.php';
    require 'src/SMTP.php';
    
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    use PHPMailer\PHPMailer\SMTP;

    $mail = new PHPMailer(true);
    $mail->IsSMTP();
    $mail->Mailer = "smtp";

    $mail->SMTPDebug = 3;
    $mail->isSMTP();
    $mail->Host       = 'smtp.gmail.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = '<myemail>';                     
    $mail->Password   = '<secretpassword>';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;


    $to = "<myemail>";
    $from = $_POST['email'];
    $first_name = $_POST['name'];

    $subject = "Contact form";
    $message = "Message: " . $_POST['textans'];
    $mail->SetFrom($from, $first_name);
    $mail->addAddress('<myemail>', 'Diode');
    $mail->Subject = $subject;
    $mail->Body=$message;
    $mail->send();
    
?>

根据我所做的挖掘,数据正在传递给PHP,但没有被发送。我正在使用AWS EC2上的网站。我检查了telnet的连接,但telnet工作正常,因此我确信可以访问主机我还关闭了双因素验证打开了不太安全的应用程序。

我试过:1)将端口更改为465。2) 关闭自动液位计。3) 已检查openssl是否未注释。4) 已检查windows防火墙和aws安全中的入站和出站规则

它在浏览器调试器上给出post错误(500内部服务器错误)。以下是PHP日志:

[<dateandtime> Asia/Kolkata] PHP Fatal error:  Uncaught PHPMailer\PHPMailer\Exception: SMTP Error: Could not connect to SMTP host. in <somelocation>\PHP\src\PHPMailer.php:2129
Stack trace:
#0 <somelocation>\PHP\src\PHPMailer.php(1953): PHPMailer\PHPMailer\PHPMailer->smtpConnect(Array)
#1 <somelocation>\PHP\src\PHPMailer.php(1635): PHPMailer\PHPMailer\PHPMailer->smtpSend('Date: Th...', ' Name: N...')
#2 <somelocation>\PHP\src\PHPMailer.php(1468): PHPMailer\PHPMailer\PHPMailer->postSend()
#3 <somelocation>\PHP\contact.php(37): PHPMailer\PHPMailer\PHPMailer->send()
#4 {main}
  thrown in <somelocation>\PHP\src\PHPMailer.php on line 2129
[Asia/Kolkata]PHP致命错误:未捕获的PHPMailer\PHPMailer\Exception:SMTP错误:无法连接到SMTP主机。在\PHP\src\PHPMailer.PHP中:2129
堆栈跟踪:
#0\PHP\src\PHPMailer.PHP(1953):PHPMailer\PHPMailer\PHPMailer->smtpConnect(数组)
#1\PHP\src\PHPMailer.PHP(1635):PHPMailer\PHPMailer\PHPMailer->smtpSend('Date:Th…','Name:N…)
#2\PHP\src\PHPMailer.PHP(1468):PHPMailer\PHPMailer\PHPMailer->postSend()
#3\PHP\contact.PHP(37):PHPMailer\PHPMailer\PHPMailer->send()
#4{main}
在第2129行的\PHP\src\PHPMailer.PHP中抛出
它也适用于XAMPP上的localhost!
提前感谢您的帮助。

首先,我尝试运行您的代码,该代码导致SMTP类未找到错误,因此我添加了另一个use语句
use-PHPMailer\PHPMailer\SMTP以避免将来出现错误

然后,我得到了同样的错误,并通过生成一个应用程序密码解决了它,这是两步验证帐户所必需的

我没有真正更改您的代码,但我在localhost中运行了它

如果没有工作,可以设置调试模式
$mail->SMTPDebug=3
为了获得更多详细信息,我还建议查看SSL/TLS协议,我在本线程中看到了这些协议:


我希望我没有浪费你的时间…

首先,我试着运行你的代码,它给了我SMTP类not found错误,所以我添加了另一个use语句
use PHPMailer\PHPMailer\SMTP以避免将来出现错误

然后,我得到了同样的错误,并通过生成一个应用程序密码解决了它,这是两步验证帐户所必需的

我没有真正更改您的代码,但我在localhost中运行了它

如果没有工作,可以设置调试模式
$mail->SMTPDebug=3
为了获得更多详细信息,我还建议查看SSL/TLS协议,我在本线程中看到了这些协议:


我希望我没有浪费您的时间…

您尝试调试该问题的原因是什么?另外,请从您的问题中删除不相关的部分和标记:如果您的PHP代码抛出这样一个错误,那么Javascript和jQuery都不涉及。这里有许多重复的答案,并且都是被接受的和被高估的答案(即它们适用于许多ppl)。因为你没有提到尝试或甚至看到这些,它们是第一件要检查的东西,例如。。。次要观察-
$mail->isSMTP()显示2倍,资本化程度不同。什么是
SMTP::DEBUG_SERVER
,或者更确切地说,您是否已将其设置为调试?AWS主要阻止出站SMTP,因此这是最可能的解释。您将得到一个500错误,因为您要求PHPMailer抛出异常,但没有捕获它们!我建议您将代码基于PHPMailer提供的gmail示例,这样可以避免类似的问题。我怀疑您没有向我们显示您的整个日志输出,因为它缺少重要信息。您试图调试该问题的原因是什么?另外,请从您的问题中删除不相关的部分和标记:如果您的PHP代码抛出这样一个错误,那么Javascript和jQuery都不涉及。这里有许多重复的答案,并且都是被接受的和被高估的答案(即它们适用于许多ppl)。因为你没有提到尝试或甚至看到这些,它们是第一件要检查的东西,例如。。。次要观察-
$mail->isSMTP()显示2倍,资本化程度不同。什么是
SMTP::DEBUG_SERVER
,或者更确切地说,您是否已将其设置为调试?AWS主要阻止出站SMTP,因此这是最可能的解释。您将得到一个500错误,因为您要求PHPMailer抛出异常,但没有捕获它们!我建议您将代码基于PHPMailer提供的gmail示例,这样可以避免类似的问题。我怀疑您没有向我们显示您的整个日志输出,因为它缺少重要信息。非常感谢您的及时回复!我真的很感激。我试过了,但没有成功。您可以签出更新的代码。它仍然显示出同样的错误。一旦我添加了“$mail->SMTPOptions=array('ssl'=>array('verify\u peer'=>false,'verify\u peer\u name'=>false,'allow\u self\u signed'=>true));”成功了,谢谢!我很抱歉没有清楚地解释我的解决方案。我想问题在于SSL的配置。因为我在localhost中运行了代码,所以我可能不会得到任何ssl错误,但在外部服务器中设置代码时,需要配置加密协议。不管怎样,我很高兴它成功了!另外,别忘了在另一个线程中对解决方案进行投票非常感谢您的及时回复!我真的很感激。我试过了,但没有成功。您可以签出更新的代码。它仍然显示出同样的错误。一旦我添加了“$mail->SMTPOptions=array('ssl'=>array('verify\u peer'=>false,'verify\u peer\u name'=>false,'allow\u self\u signed'=>true));”成功了,谢谢!我真的很抱歉没有说清楚