2016-07-26 4 views
-1

Я бы хотел использовать блок кода для инициализации почтового устройства, но каждый раз, когда я перехожу к функции, сценарий прекращает выполнение перед отправкой электронной почты. Когда я загружаю веб-страницу с помощью этой функции он прекрасно работает и отправляет соответствующие сообщения электронной почты:Перемещение кода на функцию, вызывающую остановку сценария

function SendAdminIntimationEmail(&$formvars) 
{ 
    if(empty($this->admin_email)) 
    { 
     return false; 
    } 
    $mailer = new PHPMailer(); 

    $mailer->CharSet = 'utf-8'; 

    //Tell PHPMailer to use SMTP 
    $mailer->isSMTP(); 

    //Set the hostname of the mail server 
    $mailer->Host = "test.com"; 

    //Set the SMTP port number - likely to be 25, 465 or 587 
    $mailer->Port = 25; 

    //Whether to use SMTP authentication 
    $mailer->SMTPAuth = false; 

    //Username to use for SMTP authentication 
    $mailer->Username = "[email protected]"; 

    //Password to use for SMTP authentication 
    $mailer->Password = "pword"; 

    //Set who the message is to be sent from 
    $mailer->setFrom('[email protected]', 'test'); 

    //Set an alternative reply-to address 
    $mailer->addReplyTo('[email protected]', 'First Last'); 

    $mailer->AddAddress($this->admin_email); 

    $mailer->Subject = "New registration: ".$formvars['name']; 

    $mailer->From = $this->GetFromAddress();   

    $mailer->Body ="A new user registered at ".$this->sitename."\r\n". 
    "Name: ".$formvars['name']."\r\n". 
    "Email address: ".$formvars['email']."\r\n". 
    "UserName: ".$formvars['username']; 

    if(!$mailer->Send()) 
    { 
     return false; 
    } 
    return true; 
} 

Но когда я перехожу блок кода в отдельную функцию и попытаться передать эту функцию, $ почтовик приемит веб-страницу загружает пустую страницу и не отправляет электронное письмо. Нерабочий код:

function SendAdminIntimationEmail(&$formvars) 
{ 
    if(empty($this->admin_email)) 
    { 
     return false; 
    } 
    $mailer = new PHPMailer(); 

    $mailer->CharSet = 'utf-8'; 

    InitSMTPMailer($mailer); 

    $mailer->AddAddress($this->admin_email); 

    $mailer->Subject = "New registration: ".$formvars['name']; 

    $mailer->From = $this->GetFromAddress();   

    $mailer->Body ="A new user registered at ".$this->sitename."\r\n". 
    "Name: ".$formvars['name']."\r\n". 
    "Email address: ".$formvars['email']."\r\n". 
    "UserName: ".$formvars['username']; 

    if(!$mailer->Send()) 
    { 
     return false; 
    } 
    return true; 
} 

function InitSMTPMailer($mailer) 
{ 
    //Tell PHPMailer to use SMTP 
    $mailer->isSMTP(); 

    //Set the hostname of the mail server 
    $mailer->Host = "test.com"; 

    //Set the SMTP port number - likely to be 25, 465 or 587 
    $mailer->Port = 25; 

    //Whether to use SMTP authentication 
    $mailer->SMTPAuth = false; 

    //Username to use for SMTP authentication 
    $mailer->Username = "[email protected]"; 

    //Password to use for SMTP authentication 
    $mailer->Password = "pword"; 

    //Set who the message is to be sent from 
    $mailer->setFrom('[email protected]', 'test'); 

    //Set an alternative reply-to address 
    $mailer->addReplyTo('[email protected]', 'test'); 

    return $mailer; 
} 

Если это полезно, эта функция всегда вызываются с помощью этой функции:

function RegisterUser() 
{ 
    if(!isset($_POST['submitted'])) 
    { 
     return false; 
    } 

    $formvars = array(); 

    if(!$this->ValidateRegistrationSubmission()) 
    { 
     return false; 
    } 

    $this->CollectRegistrationSubmission($formvars); 

    if(!$this->SaveToDatabase($formvars)) 
    { 
     return false; 
    } 

    if(!$this->SendUserConfirmationEmail($formvars)) 
    { 
     return false; 
    } 

    $this->SendAdminIntimationEmail($formvars); 

    return true; 
} 

После добавления функции, которая делает скрипт не работает правильно, то оказывается, что RegisterUser () терпит неудачу в $ this-> SendAdminIntimationEmail ($ formvars); потому что функция SendUserConfirmationEmail ($ formvars) по-прежнему отправляет электронное письмо.

Я новичок в PHP, так что извините, если это просто, но я делаю что-то неправильно с передачей объекта по ссылкам или значению, которое что-то тормозит?

+2

пустая страница = PHP разбился, и у вас есть все возможности отладки отключены. включите их и повторите попытку. они никогда не должны быть выключены в системе разработки/отладки в первую очередь. это кодирующий эквивалент заполнения ваших пальцев в ваших ушах и «лалалалала не может вас услышать» –

+0

Являются ли эти функции частью класса? '$ this' предназначен для использования внутри класса. –

+0

'InitSMTPMailer' возвращает почтовую программу, но вы ее не назначаете, и вы не передаете ее по ссылке. – aynber

ответ

0

Проблема в том, что вы вызываете InitSMTPMailer неправильный путь.

SendAdminIntimationEmail и InitSMTPMailer методы класса, но вы называете InitSMTPMailer как глобальная функция (или просто забыть $this->).

Попробуйте это:

function SendAdminIntimationEmail(&$formvars) 
{ 
    if(empty($this->admin_email)) 
    { 
     return false; 
    } 
    $mailer = new PHPMailer(); 

    $mailer->CharSet = 'utf-8'; 

    $this->InitSMTPMailer($mailer); 

    $mailer->AddAddress($this->admin_email); 

    $mailer->Subject = "New registration: ".$formvars['name']; 

    $mailer->From = $this->GetFromAddress();   

    $mailer->Body ="A new user registered at ".$this->sitename."\r\n". 
    "Name: ".$formvars['name']."\r\n". 
    "Email address: ".$formvars['email']."\r\n". 
    "UserName: ".$formvars['username']; 

    if(!$mailer->Send()) 
    { 
     return false; 
    } 
    return true; 
} 
+0

Спасибо, что сработали! У меня нет достаточной репутации для голосования, но аргументация в отношении вашего ответа была именно тем, что я искал. Я более или менее смущался по поводу использования $ this-> и не мог найти четкого ответа в любом месте. Еще раз спасибо! – user3286166

Смежные вопросы