使用 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;
}
当我 运行 我的 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;
}