В настоящее время я пишу почтовый шаблон для своего сайта и отправляю его с помощью php и pear mime_mail.
HTML-шаблон является статическим, и я изменяю mailbody и заголовок почты динамически в php.
Вот как это делается:
$dom = new DOMDocument();
if(!$dom)
{}
$dom->loadHTMLFile("MailTemplate.html");
$itemtitle = $dom->getElementById("MailTitle");
$itembody = $dom->getElementById("MailBody");
$from = isset($_POST['from']) ? $_POST['from'] : '';
$to = isset($_POST['to']) ? $_POST['to'] : '';
$subject = isset($_POST['subject']) ? $_POST['subject'] : '';
$messagetemp = isset($_POST['message']) ? $_POST['message'] : '';
ChromePhp::log($messagetemp);
$message = nl2br($messagetemp);
ChromePhp::log($message);
$newitemtitle = $dom->createElement('span');
$newitemtitle->setAttribute('id', 'newtitleid');
$newitemtitle->nodeValue = $subject;
$newitembody = $dom->createElement('span');
$newitembody->setAttribute('id', 'newbodyid');
$newitembody->nodeValue = $message;
$parentttile = $itemtitle->parentNode;
$parentttile->replaceChild($newitemtitle,$itemtitle);
$parentbody = $itembody->parentNode;
$parentbody->replaceChild($newitembody,$itembody);
$dom->saveHTMLFile("TempMailTemplate.html");
$boundary = "-----=".md5(rand());
$passage_ligne = "\r\n";
$headers = array('From' => $from, 'Subject' => $subject );
$mime = new Mail_mime($passage_ligne);
$html = file_get_contents("TempMailTemplate.html");
$text = $message;
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$body = $mime->get();
$hdrs = $mime->headers($headers);
$mail =& Mail::factory('mail');
$result = $mail->send($to, $hdrs, $body);
ChromePhp::log($result);
Я могу изменить содержание письма и заголовок письма, но не могу получить разрывы строк в моей почте.
В ChromePhp :: log я вижу HTML-переменную перед изменением и заменой nodeValue моей DOM.
Первый ChromePhp :: log дает
hi
hi
Второй ChromePhp: журнал дает (после nl2br)
hi<br />
hi
Затем во втором шаблоне почты я получаю следующие символы разрыва строки: привет<бр />Привет
Есть ли способ заставить nodeValue или ReplaceChild принимать html-переменные?
Или есть какой-либо способ запретить использование SaveXml, поскольку я хочу сохранить свой файл в HTML?
РЕДАКТИРОВАТЬ
As explained here: https://stackoverflow.com/questions/24876935/domdocument-using-nodevalue-to-change-html-content-produces-wrongly-formatted-h I could use this piece of code :
$data = '<div class="dummydata"></div>';
$doc = new DOMDocument();
$doc->loadHTML('<!DOCTYPE html><div id="container">contents</div>');
$el = $doc->getElementById('container');
$children = $el->childNodes;
while ($children->length)
$el->removeChild($children->item(0));
$frag = $el->ownerDocument->createDocumentFragment();
$frag->appendXML($data);
$el->appendChild($frag);
echo $doc->saveHTML();
Но я новичок, чтобы добавить свои данные в определенное место, определенное id: MailBody. Я ищу команду appendXML для конкретного контейнера div
Задача ещё не решена.
Других решений пока нет …