В настоящее время я работаю над скриптом напоминания PHP, который будет вызываться через Cronjob один раз в день, чтобы информировать клиентов о чем-то.
Поэтому я использую функцию PEAR Mail в сочетании с Mail_Mime .Во-первых, скрипт ищет пользователей в базе данных mysql.Если $num_rows > 0
, то создается новый объект Mail
и новый объект Mail_mime
(код, включенный в эти сообщения, начинается с этого момента).Проблема теперь появляется в цикле while.
Если быть точным: проблема:
$mime->headers($headers, true);
Как док.состояния, второй аргумент должен перезаписать старые заголовки.Однако все исходящие письма отправляются с заголовком ($header['To']
) от первого пользователя.
Я действительно схожу с ума по этому поводу ... какие-нибудь предложения?
(Примечание: Однакоон отправляет правильные заголовки при вызове $mime = new Mail_mime()
для каждого пользователя - но он должен работать с вызовом этого только один раз и затем перезаписывать старые заголовки)
Код:
// 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
}
}