Несколько "Неизвестная функция взорваться на линии 341" с htmlMimeMail
У меня есть клиент художественной галереи, у которого есть небольшой список рассылки, на который они отправляют по электронной почте приглашение, содержащее только одно изображение и строку "отписаться" каждые три недели. Клиент также не хочет, чтобы изображение отображалось как вложение. В последнее время возник целый ряд проблем, которые сделали эту задачу чрезвычайно сложной, поэтому я создал структуру для отправки электронных писем через веб-сервер. Я использую пакет Richard Heyes htmlMimeMail, чтобы сделать это, чтобы изображение могло быть включено. Изображение сначала загружается на веб-сервер и жестко запрограммировано для переименования, так что каждая загрузка перезаписывает предыдущее изображение.
Код все работает абсолютно нормально, если я делаю тестовый прогон с одним получателем и парой копий. Когда я использую структуру в цикле для отправки нескольких писем примерно 1500 клиентам, я внезапно получаю несколько Unknown function implode on line 341
- prereg_match_all()
line - возвращены ошибки и некоторые (или многие) электронные письма не отправляются. Я пробовал разные вещи, комментируя prereg_match_all
строка и ее часть, которая останавливает ошибки, но каждый раз возникают различные проблемы, такие как изображение не включается, и все еще кажется, что некоторое неизвестное количество электронных писем не отправляется.
Я пытаюсь понять, если моя кодировка цикла ошибочна или это prereg_match_all()
код функции, который является корнем проблемы.
Любая помощь вообще с благодарностью получена.
Это неизмененный код, включенный в htmlMimeMail (который я лицензировал несколько лет назад). Кстати, из-за ограничений версии PHP, подтвержденных интернет-провайдером на нашем виртуальном хостинге, я не могу заставить работать более поздние версии, и различные функции PHP для рассылки html также не были скомпилированы провайдером.
/*
* Function for extracting images from
* html source. This function will look
* through the html code supplied by add_html()
* and find any file that ends in one of the
* extensions defined in $obj->image_types.
* If the file exists it will read it in and
* embed it, (not an attachment).
*
* @author Dan Allen
*/
function _findHtmlImages($images_dir)
{
// Build the list of image extensions
while (list($key,) = each($this->image_types)) {
$extensions[] = $key;
}
preg_match_all('/(?:"|\')([^"\']+\.('.implode('|', $extensions).'))(?:"|\')/Ui', $this->html, $images);
for ($i=0; $i< count($images[1]); $i++) {
if (file_exists($images_dir . $images[1][$i])) {
$html_images[] = $images[1][$i];
$this->html = str_replace($images[1][$i], basename($images[1][$i]), $this->html);
}
}
if (!empty($html_images)) {
// If duplicate images are embedded, they may show up as attachments, so remove them.
$html_images = array_unique($html_images);
sort($html_images);
for ($i=0; $i< count($html_images); $i++) {
if ($image = $this->getFile($images_dir.$html_images[$i])) {
$ext = substr($html_images[$i], strrpos($html_images[$i], '.') + 1);
$content_type = $this->image_types[strtolower($ext)];
$this->addHtmlImage($image, basename($html_images[$i]), $content_type);
}
}
}
}
Я получаю ошибки, когда этот цикл используется на странице отправки электронной почты.$user
а также $useremail
жестко закодированы. $subject
устанавливается при использовании файла загрузки изображений. $body
а также $text
созданы ранее на странице отправки электронной почты.
$q=mysql_query("SELECT ``client names`` AND ``email addresses`` FROM ``the database tables`` ORDER BY ``last``");
while($r = mysql_fetch_array($q))
{
$r=stripper($r); //included external function to stripslashes etc
$full=$r['first'].' '.$r['last'];
$em=trim($r['email']);
/* code from htmlMimeMail package */
$mail_1->setHTML($body, $text, '');
$mail_1->setReturnPath("$user <$useremail>");
$mail_1->setFrom("$user <$useremail>");
$mail_1->setSubject("$subject");
$mail_1->send(array("$full <$em>"));
}