В недавнем проекте мне было предложено связать форму пароля сброса, чтобы автоматически отправлять почту с amazonAWS, используя SMTP-почтовую программу php. Я поместил код вызова (mail -> *) в функцию. Однако после этого я, кажется, получаю сообщение «Неустранимая ошибка: вызов неопределенного метода smtp :: connected() в /var/www/html/PHPMailer-master/class.phpmailer.php в строке 1530«. Кажется, я не могу понять, почему это происходит, и задавался вопросом, видел ли кто-нибудь подобный ответ.Неисправность при связывании phpmailer
Любая помощь будет оценена по достоинству. Код выглядит следующим образом
smtp.php:
require_once('/var/www/html/PHPMailer-master/PHPMailerAutoload.php');
class smtp {
var $mail;
function __construct() {
$this->mail = new PHPMailer;
$this->mail->isSMTP();
$this->mail->Host = 'email-smtp.eu-west-1.amazonaws.com';
$this->mail->SMTPAuth = true;
$this->mail->Username = '---';
$this->mail->Password = '---';
$this->mail->SMTPSecure = 'tls';
$this->mail->SMTPKeepAlive = true;
$this->mail->Port = 587;
$this->mail->From = '---.com';
$this->mail->FromName = '---';
$this->mail->WordWrap = 50;
$this->mail->isHTML(true);
$this->mail->AltBody = 'Please use an HTML-enabled email client to view this message.';
}
function setSubject ($subject) {
$this->mail->Subject = $subject;
}
function setBody ($body) {
$this->mail->Body = stripslashes($body);
}
function sendTo ($to) {
$this->mail->clearAddresses();
$this->mail->addAddress($to);
if (!$this->mail->send()) {
return false;
} else {
return true;
}
}
}
вызова функции:
public function resetlink(){
if($this->_passed){
$pass = $this->_hash->getrand();
if($this->_db->userValidate($_POST['email'])->getValidate()){
$this->_db->update('---', array(
'username' => $_POST['email'],
'value' => $pass
));
$smtp = new smtp();
$smtp->setSubject('sample subject');
$smtp->setBody('sample body');
$smtp->sendTo($_POST['email']);
}else{
echo "invalid email";
}
} return $this;
}
функция вызывает проблему в class.phpmailer.php:
if ($this->smtp->connected()) {
return true;
}
Тестовое письмо было отправлено, когда код был запущен в процедурном стиле, поэтому переменные mail -> * верны. Однако с тех пор, как код был запущен как функция, была обнаружена ошибка. Еще раз, любая помощь будет оценена по достоинству.
Благодаря
Если PHPMailer использует [класс с именем SMTP] (https://github.com/Synchro/PHPMailer/blob/master/class.smtp.php). Вы должны дать своему классу другое имя, чтобы они не могли столкнуться. –
Я не могу поверить, что даже не посмотрел на это. Исправлена проблема. Спасибо – Juakali92
Предстоящий PHPMailer 5.4 добавляет пространства имен, поэтому это уже не будет проблемой. – Synchro