PHPMailer不在Windows10上运行

时间:2019-10-03 14:49:19

标签: php phpmailer

首先,我已经读过this stack post,但似乎无法回答我的问题。我不清楚如何将这些发现应用于我的情况。

以下代码在我的LAMP服务器(Bluehost)上正常工作,并且我收到了电子邮件:

require_once("PHPMailer/src/Exception.php");
require_once("PHPMailer/src/PHPMailer.php");
require_once("PHPMailer/src/SMTP.php");
$mail = new PHPMailer\PHPMailer\PHPMailer();

$mail->SMTPDebug = 2; // verbose debug output
//$mail->SMTPDebug = 0; // no output
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->Username = $mailSender;
$mail->Password = $mailSenderPassword;
$mail->SetFrom($mailSender);
$mail->addAddress($mailTo);
$mail->isHTML(true);
$mail->Subject = "email test";
$mail->Body    = "testing an email";
$mail->send();

但是在我的本地WIMP(Windows-IIS-MySQL-PHP)PC上,运行它时总是出现以下错误:

  

无法连接到服务器:(0)

注意:我一直在WIMP pc上成功运行php页面。唯一在本地不起作用的是PHPMailer

我试图完全关闭Windows防火墙,但没有任何改变。

如何在Windows 10 IIS PC上成功运行它?

3 个答案:

答案 0 :(得分:1)

这是解决方案:

我在php.ini中设置的cafile的证书路径错误:

openssl.cafile=wrongpath\cacert.pem

我固定了路径,一切正常。

作为一个临时措施,如果没有其他任何效果,则可以进行以下操作:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

从这里拍摄:

PHPMailer: SMTP Error: Could not connect to SMTP host

答案 1 :(得分:0)

听起来您的PHP和PHPMailer一样运行良好,但是您遇到了一些网络问题,这意味着PHP无法与您的邮件服务器通信。 与邮件服务器对话的PHP脚本显然没有任何问题。阅读the PHPMailer troubleshooting guide,其中包含一些用于诊断网络问题的技术,尽管您可能需要将其用于Windows。

由于您是通过gmail发送的,因此我建议您也将代码基于the gmail example provided-您的代码缺少任何调试输出或错误处理,因此您对发生的问题没有任何反馈。< / p>

答案 2 :(得分:-1)

从第一眼看,我看到了这些,您已经用大写字母写了一些道具。那应该是这样的:

 IsSMTP()
 AddAddress()
 IsHTML()
 Send()

我现在也不太记得这个块了,但是在我实现这样的东西之前,它就起作用了。如果可以帮助您,我将在此处共享该代码(发送确认电子邮件):

use PHPMailer\PHPMailer\Exception as PhpMailerException;
use PHPMailer\PHPMailer\PHPMailer;

// ...

public function sendEmail_PhpMailer($to_email, $from_email, $name, $confirm_token): array
{
    $mail = new PHPMailer(true);                              // Passing `true` enables exceptions
    try {
        //Server settings
        // $mail->SMTPDebug = 2; // Enable verbose debug output
        // $mail->isSMTP(); // Set mailer to use SMTP // https://github.com/PHPMailer/PHPMailer/issues/1209#issuecomment-338898794
        $mail->Host = config('custom.phpmailer.host'); // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;
        $mail->Username = config('custom.phpmailer.username'); // SMTP username
        $mail->Password = config('custom.phpmailer.password'); // SMTP password
        $mail->SMTPSecure = config('custom.phpmailer.secure'); // Enable TLS encryption, `ssl` also accepted
        $mail->Port = config('custom.phpmailer.port'); // TCP port to connect to

        $mail->setFrom($from_email, config('app.name'));
        $mail->addAddress($to_email, $name);
        // $mail->addReplyTo($from_email, config('app.name'));

        $mail->isHTML(true);                                  // Set email format to HTML
        $mail->Subject = 'Confirm Your Registration!';
        $mail->Body = "<a href=" . route('web.email_confirm', $confirm_token) . "><b>Click here to confirm your " . config('app.name') . " account!</b></a>";
        $mail->AltBody = "Confirm your account with this link: " . route('web.email_confirm', $confirm_token);

        $mail->send();

        return [
            'error' => false,
            'message' => 'Message successfully sent!',
        ];
    }
    catch (PhpMailerException $e) {
        return [
            'error' => true,
            'message' => 'Something went wrong: ', $mail->ErrorInfo,
        ];
    }
 }