为什么在尝试发送电子邮件以使用 phpmailer 激活新用户帐户时出现此错误
Why am i getting this error when trying to send email for activation of new user account with phpmailer
我正在尝试理解为什么我在 index.php 中的主题方法会触发错误 defined.i 我正在使用 phpmailer 5.2.7 和 php 7.2 并且wampserver 3.1.7
//这是我从 phpmailer//
扩展的 class
<?php
include('phpmailer.php');
class Mail extends PhpMailer
{
// Set default variables for all new objects
public $From = 'xxxxxx@gmail.com';
public $FromName = MM;
public $Host = 'smtp.gmail.com';
public $Mailer = 'smtp';
public $SMTPAuth = true;
public $Username = 'xxxxxxx@gmail.com';
public $Password = 'xxxxxx';
public $SMTPSecure = 'ssl';
public $WordWrap = 75;
public function subject($subject)
{
$this->Subject = $subject;
}
public function body($body)
{
$this->Body = $body;
}
public function send()
{
$this->AltBody = strip_tags(stripslashes($this->Body))."\n\n";
$this->AltBody = str_replace(" ", "\n\n", $this->AltBody);
return parent::send();
}
}
这是我定义变量的索引页面的一部分
$to = $_POST['email'];
$subject = "Registration Confirmation";
$body = "<p>Thank you for registering at demo site.</p>
<p>To activate your account, please click on this link: <a href='".DIR."activate.php?x=$id&y=$activasion'>".DIR."activate.php?x=$id&y=$activasion</a></p>
<p>Regards Site Admin</p>";
$mail = new PHPMailer(true);
$mail->setFrom(SITEEMAIL);
$mail->addAddress($to);
$mail->subject($subject);
$mail->body($body);
$mail->send();
//redirect to index page
header('Location: index.php?action=joined');
exit;
首先,您为什么使用已经过时多年的 PHPMailer 版本? Get the latest,它具有新功能、修复了错误并减少了安全漏洞。在升级时,考虑切换到使用 composer 来管理您的依赖项。
您遇到的问题非常简单:您创建了一个添加了 subject()
方法的子class,但是您在脚本中创建的实例是原始 PHPMailer class,不是你的子class。改为这样做:
$mail = new Mail(true);
使用非常通用的 "Mail" 名称命名您的 class 很可能会给您带来意想不到的教训,说明为什么命名空间是个好主意,因此我建议为您的应用添加命名空间以避免名称冲突。
虽然像这样子 class 可以轻松设置默认值是个好主意,但它也会邀请您将凭据签入源代码库,这通常不是一个好主意。最好使用 child class 使用像 this.
这样的包从环境文件 ("dot env") 中读取这些值
我正在尝试理解为什么我在 index.php 中的主题方法会触发错误 defined.i 我正在使用 phpmailer 5.2.7 和 php 7.2 并且wampserver 3.1.7
//这是我从 phpmailer//
扩展的 class<?php
include('phpmailer.php');
class Mail extends PhpMailer
{
// Set default variables for all new objects
public $From = 'xxxxxx@gmail.com';
public $FromName = MM;
public $Host = 'smtp.gmail.com';
public $Mailer = 'smtp';
public $SMTPAuth = true;
public $Username = 'xxxxxxx@gmail.com';
public $Password = 'xxxxxx';
public $SMTPSecure = 'ssl';
public $WordWrap = 75;
public function subject($subject)
{
$this->Subject = $subject;
}
public function body($body)
{
$this->Body = $body;
}
public function send()
{
$this->AltBody = strip_tags(stripslashes($this->Body))."\n\n";
$this->AltBody = str_replace(" ", "\n\n", $this->AltBody);
return parent::send();
}
}
这是我定义变量的索引页面的一部分
$to = $_POST['email'];
$subject = "Registration Confirmation";
$body = "<p>Thank you for registering at demo site.</p>
<p>To activate your account, please click on this link: <a href='".DIR."activate.php?x=$id&y=$activasion'>".DIR."activate.php?x=$id&y=$activasion</a></p>
<p>Regards Site Admin</p>";
$mail = new PHPMailer(true);
$mail->setFrom(SITEEMAIL);
$mail->addAddress($to);
$mail->subject($subject);
$mail->body($body);
$mail->send();
//redirect to index page
header('Location: index.php?action=joined');
exit;
首先,您为什么使用已经过时多年的 PHPMailer 版本? Get the latest,它具有新功能、修复了错误并减少了安全漏洞。在升级时,考虑切换到使用 composer 来管理您的依赖项。
您遇到的问题非常简单:您创建了一个添加了 subject()
方法的子class,但是您在脚本中创建的实例是原始 PHPMailer class,不是你的子class。改为这样做:
$mail = new Mail(true);
使用非常通用的 "Mail" 名称命名您的 class 很可能会给您带来意想不到的教训,说明为什么命名空间是个好主意,因此我建议为您的应用添加命名空间以避免名称冲突。
虽然像这样子 class 可以轻松设置默认值是个好主意,但它也会邀请您将凭据签入源代码库,这通常不是一个好主意。最好使用 child class 使用像 this.
这样的包从环境文件 ("dot env") 中读取这些值