PHP, отображающий html-письмо на html-странице

Я создаю сценарий почтового ящика электронной почты PHP.

Как мне сделать так, чтобы электронные письма в формате html отображались так же, как в gmail/hotmail.

Если я просто повторю это, это повлияет на весь макет страницы.

Я мог бы использовать фреймы, но это не лучшее решение.


person Stephen Adrian Rathbone    schedule 21.02.2012    source источник
comment
Iframes — это САМОЕ ПРОСТОЕ решение, если только вы не хотите попробовать динамически переписать css в электронных письмах, чтобы он не мог повлиять на содержащуюся страницу.   -  person Marc B    schedule 21.02.2012
comment
Подумайте немного о размере команды, которая создает gmail и hotmail, и о том, как часто у них возникают ошибки и проблемы, и спросите себя, действительно ли вы хотите пойти по этому пути... «лучшее решение» — использовать существующий библиотека или плагин. Что-то вроде afterlogic.org/webmail-lite может вам помочь.   -  person Tim Ogilvy    schedule 23.03.2016


Ответы (4)


Как сказал Марк Б., я считаю, что IFrame был бы вашим лучшим выбором... но, пожалуйста, поймите, что если вы просто выгрузите любой HTML-код электронной почты, вы рискуете подвергнуть себя вирусам, троянам и вредоносному коду HTML/JavaScript. ваш компьютер, если только вы не найдете хороший способ изолировать/удалить этот HTML-код.

Вот простое регулярное выражение для очистки JavaScript, по крайней мере:

"(?s)<script.*?(/>|</script>)"
person tcables    schedule 21.02.2012
comment
Это регулярное выражение очищает только <script> блоков, без встроенного JavaScript в HTML-тегах! Но я согласен, все это не просто! - person ComFreek; 21.02.2012
comment
Черный список для обеспечения безопасности, скорее всего, не удастся. Например, это не очищает < script >, который, вероятно, все еще работает. - person pupeno; 25.03.2019

Если вы ищете «лучшее решение», воспользуйтесь другой библиотекой электронной почты с открытым исходным кодом, которая делает то же самое, что и вы. Самостоятельное обслуживание средства обработки электронной почты, защищенного от внедрения скриптов и других взломов, будет слишком большой работой для одного человека.

Один пример: https://github.com/afterlogic/webmail-lite.

Другой: http://trac.roundcube.net/

Вы получаете преимущество от других разработчиков, которые используют библиотеку, поддерживающую кодовую базу, поэтому, если что-то сломалось, все, что вам нужно сделать, это загрузить последнее обновление (надеюсь), и вы получите исправление. Если вы обнаружите что-то, что нуждается в улучшении, вы можете это исправить или создать, и сделать код лучше для всех. На самом деле я просто предлагаю здесь библиотеки с открытым исходным кодом, однако в любом коммерческом контексте создание собственного средства визуализации электронной почты без большой команды — плохая идея.

person Tim Ogilvy    schedule 23.03.2016

Рассмотрите возможность использования некоторой библиотеки HTML Tidy (например: PHP.Tidy).

Вы можете пропустить текст через библиотеку, чтобы получить хорошо отформатированный html.

Хорошей практикой было бы определить стандартное поведение CSS для большинства тегов в используемом вами div.

person Juan Nunez    schedule 21.02.2012

Создайте контейнер DIV, которому вы назначаете ширину (и высоту, если необходимо), и убедитесь, что вы добавили свойство переполнения в соответствии с вашим дизайном. Это должно препятствовать тому, чтобы ваш HTML-код электронной почты мешал вашему макету.

ОБНОВЛЕНИЕ

Контейнер DIV по-прежнему гарантирует, что вы можете ограничить размер поля отображения, и с соответствующим CSS действует аналогично iframe без всего багажа.

Если вас беспокоит код в электронном письме, strip_tags может показаться лучшее решение, чем регулярное выражение. Вы можете определить список тегов, которые нужно оставить в покое, и при этом быть уверенным в удалении остальных.

person AlexC    schedule 21.02.2012