使用 PHPMailer 发送电子邮件时遇到问题?

Having problem with sending email with PHPMailer?

当我 运行 我的 php 程序时,我得到这个错误:

未定义变量:C:\xampp\htdocs\Trying_login_register\controllers\emailcontroller.php 第 22 行

中的邮件

这是我的 php 代码:

<?php
require 'vendor/autoload.php';
require 'config/constant_email.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

$mail = new PHPMailer(true);
global $mail;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = EMAILaddress; //paste one generated by Mailtrap
$mail->Password = PASSWORD; //paste one generated by Mailtrap
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
function sendVerificationEmail($userEmail, $token)
{
    $body='<h1>Send HTML Email using SMTP in PHP</h1>
    <p>This is a test email I’m sending using SMTP mail server with PHPMailer.</p>';

    $mail->setFrom(EMAILaddress);
    $mail->addReplyTo(EMAILaddress);
    $mail->addAddress('ADDRESS');
    $mail->Subject = 'Verify your email address';
    $mail->isHTML(true);
    $mail->Body = $body;
    if ($mail->send()) {
        echo 'message has been successfully sent';
    }

    else {
        echo 'Mailor error: ' . $mail->ErrorInfo;
    }
}

我找不到问题。请帮助我。

由于以下三个原因,此代码无法使用:

首先,$mail 已在全局范围内定义,因此您不需要 global $mail - 只需删除该行即可。

接下来,您的 sendVerificationEmail 函数 确实 需要访问 $mail 全局,因此您应该添加 global $mail; 里面那个函数。

最后,它仍然不会做任何事情,因为虽然你已经定义了发送函数,但你没有调用它,所以它的代码永远不会运行。

另一个小问题是您已请求 PHPMailer 在错误时抛出异常(通过将 true 传递给构造函数),但是您没有异常处理,因此如果出现错误您的脚本将直接死掉而不是很好地处理错误。您在 send 调用周围的 if 语句就可以了。

虽然这些东西会修复您所写的内容,但更简单的方法是完全删除函数定义,如下所示:

require 'vendor/autoload.php';
require 'config/constant_email.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = EMAILaddress; //paste one generated by Mailtrap
$mail->Password = PASSWORD; //paste one generated by Mailtrap
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$body='<h1>Send HTML Email using SMTP in PHP</h1>
<p>This is a test email I’m sending using SMTP mail server with PHPMailer.</p>';
$mail->setFrom(EMAILaddress);
$mail->addReplyTo(EMAILaddress);
$mail->addAddress('ADDRESS');
$mail->Subject = 'Verify your email address';
$mail->isHTML(true);
$mail->Body = $body;
if ($mail->send()) {
    echo 'message has been successfully sent';
} else {
    echo 'Mailor error: ' . $mail->ErrorInfo;
}