Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP编译器未在Windows10上运行_Php_Phpmailer - Fatal编程技术网

PHP编译器未在Windows10上运行

PHP编译器未在Windows10上运行,php,phpmailer,Php,Phpmailer,首先,我已经读过了,它似乎没有回答我的问题。我不清楚如何将这些发现应用于我的情况 以下代码在我的LAMP服务器(Bluehost)上运行良好,我收到了电子邮件: require_once("PHPMailer/src/Exception.php"); require_once("PHPMailer/src/PHPMailer.php"); require_once("PHPMailer/src/SMTP.php"); $mail = new PHPMailer\PHPMailer\PHPMail

首先,我已经读过了,它似乎没有回答我的问题。我不清楚如何将这些发现应用于我的情况

以下代码在我的
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上成功运行此功能?

听起来您的PHP运行得很好,PHPMailer也运行得很好-但是您遇到了一些网络问题,这意味着PHP无法与邮件服务器通信。不与邮件服务器通信的PHP脚本显然没有任何问题。阅读其中一些诊断网络问题的技术,尽管您可能需要将其应用于Windows


由于您是通过gmail发送的,我建议您也以gmail为基础,因为您的代码缺少任何调试输出或错误处理,因此您对出现的问题没有任何反馈。

从第一眼看到这些,您编写了一些没有大写字母的道具。这应该是这样的:

 IsSMTP()
 AddAddress()
 IsHTML()
 Send()
我现在也不太记得这个块了,但在我实现类似的东西之前,它已经成功了。如果它可以帮助您,我将在此处共享该代码(发送确认电子邮件):

使用PHPMailer\PHPMailer\Exception作为PhpMailerException;
使用PHPMailer\PHPMailer\PHPMailer;
// ...
公共函数sendmail\u PhpMailer($to\u email,$from\u email,$name,$confirm\u token):数组
{
$mail=new PHPMailer(true);//传递'true'将启用异常
试一试{
//服务器设置
//$mail->SMTPDebug=2;//启用详细调试输出
//$mail->isSMTP();//设置邮件程序以使用SMTP//https://github.com/PHPMailer/PHPMailer/issues/1209#issuecomment-338898794
$mail->Host=config('custom.phpmailer.Host');//指定主SMTP服务器和备份SMTP服务器
$mail->SMTPAuth=true;
$mail->Username=config('custom.phpmailer.Username');//SMTP用户名
$mail->Password=config('custom.phpmailer.Password');//SMTP密码
$mail->SMTPSecure=config('custom.phpmailer.secure');//启用TLS加密,也接受'ssl'
$mail->Port=config('custom.phpmailer.Port');//要连接的TCP端口
$mail->setFrom($from_email,config('app.name'));
$mail->addAddress($to_email,$name);
//$mail->addReplyTo($from_email,config('app.name'));
$mail->isHTML(true);//将电子邮件格式设置为HTML
$mail->Subject='确认您的注册!';
$mail->Body=“”;
$mail->AltBody=“使用此链接确认您的帐户:”.route('web.email\u Confirm',$Confirm\u token);
$mail->send();
返回[
'error'=>false,
'消息'=>'消息已成功发送!',
];
}
捕获(PhpMailerException$e){
返回[
“错误”=>true,
'消息'=>'出现错误:',$mail->ErrorInfo,
];
}
}
这就是解决方案:

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

openssl.cafile=wrongpath\cacert.pem
我修好了路,一切都好了

作为权宜之计,如果其他一切都失败,以下措施将奏效:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
摘自这里:


看起来像是一个随机的向下投票人,无缘无故地向下投票给每个人……您在windows上运行这些脚本的环境是什么?是码头工人还是什么?你能从php中curl或fsockopen smtp.gmail.com来确认它有网络连接吗?Synchro,你说代码没有任何调试输出是什么意思?我有
$mail->SMTPDebug=2啊,确实是这样,但是没有显示实际的调试输出。对于诊断连接问题,
SMTPDebug=3
更合适。不是我,但你所说的资本化完全是错误的。如果您注释掉
isSMTP()
,它将不会使用SMTP,并且不会应用任何与SMTP相关的设置。Eep,否!这不是一个“解决办法”。它隐藏了问题,这样你就不会发现安全问题,或者有人拦截你的流量,从而破坏了使用TLS的全部意义。修复TLS问题的正确方法是,告诉您如何诊断和修复它们。在这种情况下,请完全禁用加密:
$mail->SMTPSecure=false,并且
$mail->SMTPAutoTLS=false,那么你就不需要抑制这样的错误。事实上,这没有任何意义-你正在与gmail交谈,无论你从哪里连接,gmail都不会以无效证书响应,因此这意味着你的本地系统已损坏-遵循指南将帮助你修复它;可能是过时的CA证书。别忘了从原始帖子中删除否决票。那不是我。
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);