0

私は現在、顧客にsmthについて通知するために、Cronjobを介して1日1回呼び出されるリマインダーPHPスクリプトに取り組んでいます。

したがって、私はPEARMail関数をMail_Mimeと組み合わせて使用​​しています。まず、スクリプトはmysqlデータベースでユーザーを検索します。の場合、新しいオブジェクトと新しいオブジェクトを$num_rows > 0作成しています(この投稿に含まれているコードはこの時点から始まります)。問題はwhileループに現れます。MailMail_mime

正確には:問題は

$mime->headers($headers, true);

ドキュメントとして。状態では、2番目の引数は古いヘッダーを上書きする必要があります。ただし、すべての送信メールは$header['To']、最初のユーザーからヘッダー()を付けて送信されます。

私は本当にこのことに夢中になっています...何か提案はありますか?

(注:ただし$mime = new Mail_mime()、各ユーザーを呼び出すときに正しいヘッダーを送信しますが、1回だけ呼び出してから、古いヘッダーを上書きすることで機能するはずです)

コード:

// sql query and if num_rows > 0 ....

require_once('/usr/local/lib/php/Mail.php');
require_once('/usr/local/lib/php/Mail/mime.php');

ob_start();
require_once($inclPath.'/email/head.php');
$head = ob_get_clean();

ob_start();
require_once($inclPath.'/email/foot.php');
$foot = ob_get_clean();

$XY['mail']['params']['driver'] = 'smtp';
$XY['mail']['params']['host'] = 'smtp.XY.at';
$XY['mail']['params']['port'] = 25;

$mail =& Mail::factory('smtp', $XY['mail']['params']);

$headers = array();
$headers['From'] = 'XY <service@XY.at>';
$headers['Subject'] = '=?UTF-8?B?'.base64_encode('Subject').'?=';
$headers['Reply-To'] = 'XY <service@XY.at>';

ob_start();
require_once($inclPath.'/email/templates/files.mail.require-review.php');
$template = ob_get_clean();

$crfl = "\n";
$mime = new Mail_mime($crfl);
while($row = $r->fetch_assoc()){
    $html = $head . $template . $foot;

    $mime->setHTMLBody($html);

    #$to = '=?UTF-8?B?'.base64_encode($row['firstname'].' '.$row['lastname']).'?= <'.$row['email'].'>'; // for testing purpose i'm sending all mails to webmaster@XY.at
    $to = '=?UTF-8?B?'.base64_encode($row['firstname'].' '.$row['lastname']).'?= <webmaster@XY.at>';
    $headers['To'] = $to; // Sets to in headers to a new

    $body = $mime->get(array('head_charset' => 'UTF-8', 'text_charset' => 'UTF-8', 'html_charset' => 'UTF-8'));
    $hdrs = $mime->headers($headers, true); // although the second parameters says true, the second, thrid, ... mail still includes the To-header form the first user

    $sent = $mail->send($to, $hdrs, $body);
    if (PEAR::isError($sent)) {
        errlog('error while sending to user_id: '.$row['id']); // personal error function
    } else {
        // Write log file
    }
}   
4

1 に答える 1

1

古いオブジェクトを保持し、新しいオブジェクトを作成しない理由はありません。OOPを適切に使用し、新しいオブジェクトを作成します。それらが内部でどのように機能するかはわかりません。

于 2011-04-15T16:06:13.877 に答える