我编写了一个功能,可以为正在使用的业余应用发送确认电子邮件。我以为我可以正确设置所有内容,但是调用该函数时出现以下错误:
2019-05-08 02:43:30 Connection failed. Error #2: failed loading cafile stream: `C:\xampp\apache\bin\curl-ca-bundle.crt' [C:\Users\Michael\Desktop\InviteMe Application\vendor\phpmailer\src\SMTP.php line 405]
SMTP Error: Could not connect to SMTP host.
我已经设置了Gmail帐户,以允许安全性较差的应用访问该帐户,并且我已经生成了密码。
我尝试阅读正在使用的库的故障排除文档,但找不到能够解决我遇到的特定问题的任何东西。
这是电子邮件功能:
function send_confirmation_email($name, $email, $user_id) {
$confirmationUrl = generate_confirmation_url($user_id);
$body = "";
$body .= "<html><body>";
$body .="<h1>Confirm your account</h1>";
$body .= "<p>Follow the link below to confirm your account:</p>";
$body .= "<a href='" . $confirmationUrl . "'>confirm account</a>";
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 3; //debugging purposes
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "invitemedemo@gmail.com";
$mail->Password = "password";
$mail->setFrom('invitemedemo@gmail.com', "InviteMe");
$mail->addAddress($email, $name);
$mail->Subject = "Confirm Account";
$mail->Body = $body;
$mail->isHTML(true);
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
return false;
} else {
return true;
}
}
我没有看到上面粘贴的错误,而不是发送了电子邮件。
答案 0 :(得分:-2)
验证您的smtp电子邮件服务。
如果您使用的是MAC OS,请访问https://gist.github.com/loziju/66d3f024e102704ff5222e54a4bfd50e
,了解如何使用您的gmail帐户为Gmail SMTP启用后缀。使用Ubuntu Linux参考:https://gist.github.com/adamstac/7462202
检查php.ini文件中的PHP设置以获取正在使用的活动php版本。 即使用MAC OS的MAMP,>应用程序-> MAMP-> conf-> php7.0.32(必须是您正在使用的活动版本,因此,如果您使用的是PHP 5.3.14,请转到该目录)-> php .ini
使用以下命令编辑php.ini文件:
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
; For Win32 only.
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well
(default: "sendmail -t -i").
;sendmail_path = sendmail -t -i -f example@gmail.com
sendmail_path = "env -i /usr/sbin/sendmail -t -I"
更新php.ini文件后重新启动apache2。
如果使用MAC OS停止并重新启动邮件服务:sudo postfix stop && sudo postfix start sudo postfix reload
测试电子邮件 从终端CLI发送测试电子邮件:
echo "Test sending email from Postfix" | mail -s "Test Postfix" example@gmail.com
或者,我发现我可以使用以下命令从终端CLI发送测试消息:
echo "test message" | sendmail -v example@gmail.com
使用终端CLI命令检查sendmail的错误:
mailq
您可以使用php测试SMTP功能,例如:
<?php
// testemail.php
$to_email = 'example@gmail.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$message = wordwrap($message, 70);
$headers = 'From: yoursending@email.com';
mail($to_email,$subject,$message,$headers);
$mail = mail($to_email,$subject,$message,$headers);
if ($mail) { echo "Thank you for using mail";}
else { echo "Mail sending failed.";}
ini_set('display_errors',1);
?>