首先,我已经读过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上成功运行它?
答案 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
)
);
从这里拍摄:
答案 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,
];
}
}