Неустранимая ошибка: вызов неопределенного метода stdClass :: AddAddress () в почтовой программе PHP - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь отправить электронное письмо на несколько адресов электронной почты в моей базе данных. Вот мой текущий код. Мне нужно, чтобы они запросили мою базу данных и отправили электронное письмо на каждый адрес электронной почты. Оно работает, но электронное письмо было отправлено только на первый адрес электронной почты и получило ошибку : Вызов неопределенного метода stdClass :: AddAddress () ". Где я тут ошибаюсь?

<?php
$elist = $database->getRows("SELECT * FROM `emails`");

foreach($elist as $emails){
        $frm = 'test@gmail.com';
        $sub = 'Weekly Work Report';
        ob_start();
        include_once('mail_content.php');
        $mail_body = ob_get_contents(); 
        ob_end_clean();
        $to = $emails['email'];
        $mailstatus = lm_mail('1', '2', $to, '3', $frm, 'HR', $sub, $mail_body);
if ($mailstatus == 'ok') {
$response->redirect('index.php?com_route=user_report');
} else {
    echo $mailstatus;
}
}
?>

function lm_mail($head_mid='',$head_mname='',$to_mid ,$to_mname='',$reply_mid,$reply_mname='',$subject,$body,$attachments='')
{

    include_once 'phpmailer/mail_config.php';
    if(SMTP_mail)
    {
        // Send SMTP Mails
        $mail->From =$head_mid ;  // From  Mail id
        $mail->FromName = $head_mname; // From  Name

        $mail->AddAddress($to_mid,$to_mname); // To Address
        $mail->AddReplyTo($reply_mid,$reply_mname); // From Address

        $mail->Subject=$subject;

        $mail->Body =  $mail_body.$body; //HTML Body
        $mail->AltBody = "This is the body when user views in plain text format"; //Text Body

        if(!$mail->Send())
        {
            return $mail->ErrorInfo;
        }
        else
        {
           return 'ok';
        }
    }
    else
    {
        $mail  = new PHPMailer(); // defaults to using php "mail()"
        $mail->AddReplyTo($reply_mid,$reply_mname); // Sender address
        $mail->AddReplyTo($reply_mid,$reply_mname); // replay to address

        $address = $to_mid;  // to addtesas
        $mail->AddAddress($address, $to_mname);

        $mail->Subject    = $subject;
        $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

        $mail->MsgHTML($mail_body.$body);
        if(!$mail->Send())
        {
            return  $mail->ErrorInfo;
        }
        else { return  'ok'; }
    }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2012

В первом условном выражении вызова функции lm_mail объект не создается.

if(SMTP_mail)
{
    // No $mail object?

    // Send SMTP Mails
    $mail->From =$head_mid ;  // From  Mail id

Попробуйте добавить:

if(SMTP_mail)
{
   $mail = new PHPMailer();  // create a new object
   $mail->IsSMTP(); // enable SMTP

   // Have to manually set language if PHPMailer can't determine
   $mail->SetLanguage("en", 'includes/phpMailer/language/');
0 голосов
/ 22 марта 2012

Я предполагаю, что вы используете SMTP, потому что я не вижу, откуда берется $mail.

Поскольку отправляется одно электронное письмо, я предполагаю, что phpmailer/mail_config.php устанавливает $mail объект и устанавливает константу SMTP_mail, а затем он выходит из области видимости после первого вызова функции, и файл включается только один раз, поэтому он не будет определен снова.

После этого он не был 't определен как PHPMailer объект, поэтому он преобразуется в stdClass при выполнении назначения объекта $mail->From = $head_mid.

Попробуйте извлечь код из mail_config.php и скопировать его в функцию отправкиили добавьте функцию в mail_config.php, которая обеспечивает фабрику для получения PHPMailer объекта, настроенного для ваших нужд.

...