2012-03-22 11 views
-1

私のデータベースの複数の電子メールアドレスに電子メールを送信しようとしています。ここに私の現在のコードです。私は彼らに私のデータベースを照会させ、各電子メールアドレスに電子メールを送る必要があります。それは働いていますが、電子メールは最初の電子メールアドレスに送信され、 :未定義のメソッドstdClass :: AddAddress() "を呼び出します。ここでどこが間違っていますか? lm_mail関数呼び出しの最初の条件付きで致命的なエラー:定義されていないメソッドを呼び出すPHPメーラーのstdClass :: AddAddress()

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

foreach($elist as $emails){ 
     $frm = '[email protected]'; 
     $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'; } 
    } 
} 
+0

'SMTP_mail'がtrueの場合、' $ mail'は初期化されません。 –

+0

ループ内にincludeを使用しないでください。ob_start()には何がありますか? –

答えて

1

インスタンス化されないオブジェクトが存在しません。

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

今、エラーが解決されました。しかし、別のエラー "言語文字列の読み込みに失敗しました:recipients_failed" – Natasha

+0

PHPMailerの使い方に関する文書を読んでいますか?迅速なGoogle検索で、言語を指定する必要があることが判明しました。私はポストを更新しました。 –

0

$mailがどこから来るか、私は見ていないので、私は、あなたがSMTPを使用している推測している:追加

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

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

してみてください。

1通の電子メールが送信されるためには、私の推測では、phpmailer/mail_config.phpセットアップ$mailオブジェクトとはSMTP_mail定数を設定していることで、それが最初の関数呼び出しの後にスコープ外に出ると、それがないように、ファイルは一度しか含まれています再び定義される。

その後、PHPMailerオブジェクトとして定義されていなかったので、オブジェクト割り当て$mail->From = $head_midを実行すると、stdClassとしてキャストされます。

mail_config.phpからコードを取り出し、send関数でコードを複製するか、必要に応じてPHPMailerオブジェクトを取得するファクトリを提供するmail_config.phpに関数を追加してみてください。

関連する問題