PHP, отображающий html почту на html странице - PullRequest
7 голосов
/ 21 февраля 2012

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 23 марта 2016

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

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

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

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

5 голосов
/ 21 февраля 2012

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

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

"(?s)<script.*?(/>|</script>)"
2 голосов
/ 21 февраля 2012

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

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

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

2 голосов
/ 21 февраля 2012

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

ОБНОВЛЕНИЕ

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

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

...