Я рекомендовал бы Простой HTML PHP Синтаксический анализатор DOM после очистки HTML от страницы. Это поддерживает недопустимый HTML и обеспечивает очень простой способ обработать элементы HTML.
Вот это [сработало для меня] (Нет, я не использовал PHPMailer; может быть, это полезно, но я не смог заставить его работать):
// Two contents : application/xhtml+xml and image/gif
// Here we go
<?php
$boundary = "ghorar#deem";
$im_len = filesize("path/to/abc.gif")
header("Content-Type:multipart/related; boundary=\"$boundary\"; type=\"application/xhtml+xml\"");
$xml_cnt = <<<EOD
<media xmlns="http://www.sth.com/sth.xsd">
<objectURI>cid:112509abc@syz.com</objectURI>
<size>$im_len</size>
<type>image/gif</type>
<name>abcxyz</name>
<description>blah blah</description>
</media>
EOD;
$xml_len = strlen($xml_cnt);
$im = imagecreatefromgif("path/to/abc.gif");
$to_send = "This is a multi-part message example in MIME format
--$boundary
Content-Type: application/xhtml+xml;
Content-ID: <e4509xml@asd.com>
Content-Length: $xml_len
$xml_cnt
--$boundary
Content-Type: image/gif;
Content-ID: <112509abc@syz.com>
Content-Length: $im_Len
Content-Transfer-Encoding: binary
";
echo $to_send;
imagegif($im);
echo "\r\n--$boundary--";
imagedestroy($im);
?>
Вы можете загрузить xml также из файла. Но обратите внимание, что если ваш xml ссылается на изображение (как я сделал здесь), вам необходимо указать его с его Content-ID. Также обратите внимание на символы '<' '>' в поле Content-ID изображения (после границы) и обозначение 'cid:' в том месте, где оно упоминается. У меня это сработало. Спасибо Карлосу Лиме за то, что он уделил мне время.
Боюсь, вы не можете использовать те цели, которые вам нужны.
Если вы хотите сделать это для обслуживания веб-страниц, насколько я могу судить, браузеры не будут работать с такими ответами MIME для отображения страниц.
Если вам нужен пример того, как работает это сообщение, отправьте себе электронное письмо с вложением и в своем почтовом клиенте (не в веб-почте) перейдите к опции «Просмотр источника» в теле письма.
Вы ' Если это то, что вы хотите, проверьте этот пример на их веб-сайте.
Вы можете использовать PHPMailer для создания сообщения, тогда вы просто используете результат вместо фактической отправки электронной почты.
Попробуйте что-то вроде этого:
** Это непроверенный код, только для начала **
<?php
require_once('../class.phpmailer.php');
$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
try {
$mail->MsgHTML(file_get_contents('contents.html'));
$mail->AddAttachment('images/phpmailer.gif'); // attachment
$mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
$mime_message = $mail->CreateBody();
echo $mime_message;
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
?>
Я пытался добиться того же.
Похоже, что MSIE - единственный браузер, который в настоящее время поддерживает многочастные / связанные файлы изначально (Opera может иметь некоторую поддержку, но я; не играл с ним), однако при загрузке таких файлов кажется, что он полностью игнорирует заголовки HTTP, касающиеся типа mime и других вещей (таких как информация кеширования, расположение и т. д.). Действительно, MSIE откроет файл только в том случае, если URL-адрес имеет расширение файла .mht (т. Е. Нарушает большинство правил HTTP).
Кроме того, MSIE с радостью загрузит все, что содержит встроенный составной / связанный файл (при условии, что он закодирован как простой текст), без визуализации данных, в которых содержится вложение. Похоже, функциональность для обработки этих файлов - это быстрый способ просмотра файлов
. Если вы перенастроите свой веб-сервер для анализа URL-адресов .mht с помощью php (или используйте mod_rewrite для переназначения URL-адреса), вы, вероятно, обнаружите, что это может сработать (хотя я бы не очень надеялся, что он будет работать с добавленной строкой запроса). Но ожидайте проблем, если вы генерируете динамический контент (он не истечет из кеша / обновления, когда вы ожидаете).
Короче говоря, это не сработает.
t истекает из кеша / обновления, когда вы ожидаете).Короче говоря, это не сработает.
t истекает из кеша / обновления, когда вы ожидаете).Короче говоря, это не сработает.