Почта Joomla отправляется в папку со спамом: как добавить текст / текст при отправке электронной почты в формате HTML?
При работе с веб-сайтом Joomla 2.5.8 все сгенерированные сервером электронные письма помечаются как спам (хотя только gmail!).
Я провел тесты на отличном ресурсе http://www.mail-tester.com/ и единственный отрицательный результат, который я получаю, это (тест spamassassin):
-1.105 MIME_HTML_ONLY Message only has text/html MIME parts
You should also include a text version of your message (text/plain)
Я копался в коде и обнаружил, что библиотеки /joomla/mail/mail.php не устанавливают эквивалент AltBody for Text; Я старался:
public function setBody($content)
{
[...]
if (empty($this->AltBody))
$this->AltBody =JMailHelper::cleanText( strip_tags( $content));
и это работает! (10/10 на мэйл-тестере). Но это конечно уродливо.
Мои вопросы:
- мы должны считать это Joomla! ошибка и файл это?
- Есть ли более чистое решение без взлома основных файлов, может быть, какая-то конфигурация?
Иначе я напишу плагин для выполнения переопределения: это очень важно, так как мы теряем 20% клиентов, которые не могут найти папку со спамом в gmail!!!, и я действительно не чувствую себя как взломщик ядра 30 сайтов.
2 ответа
Определенно ошибка, которая может быть подана в CMS. Система должна справиться с этим для вас. Вот как начать регистрировать ошибки: https://github.com/joomla/joomla-cms/blob/master/CONTRIBUTING.md
Кроме того, вместо того, чтобы взламывать основные файлы, как вы сказали, вы можете написать плагин для обработки его переопределения для вас. Я собрал базовый плагин, который позволяет вам при необходимости переопределять основные классы: https://gist.github.com/dongilbert/3237387
Как видите, ничего сложного там не происходит. Сначала убедитесь, что мы находимся в Joomla, в противном случае выход. Затем определите класс в соответствии с соглашением об именах Joomla и включите наш конфигурационный файл в конструкцию класса. Файл конфигурации - это место, где классы регистрируются в автозагрузчике.
В файле конфигурации мы определяем путь OVERRIDES, а затем начинаем регистрировать классы в JLoader. Мне нравится держать вещи в порядке, поэтому мой каталог переопределений отражает структуру корневого каталога joomla, только содержит пути к классам, которые я хочу переопределить. То есть, если я хочу переопределить JFormField, у меня будет такая структура (включая каталог переопределений):
переопределяет / библиотеки / Joomla / форма / field.php
И тогда в config.php я бы добавил:
JLoader:: register ('JFormField', OVERRIDES. '/ Library /joomla/form/field.php', true);
Вы также можете использовать это для переопределения основных классов компонентов. Я использовал его для переопределения класса представления в com_media следующим образом:
переопределяет / Компонент /com_media/ просмотр / imageslist / view.html.php
и затем, конечно, добавив это в конфиг:
JLoader:: register ('MediaViewImagesList', OVERRIDES. '/ Components/com_media/view/imageslist/view.html.php', true);
Вы можете скачать плагин по ссылке выше. Он готов к установке на ваш сайт Joomla. Сначала загрузите его, а затем добавьте каталог переопределений в каталог плагинов. Если вы хотите сначала добавить все файлы и загрузить файл, обязательно добавьте следующее в файл overrides.xml.
<Папка> переопределяет папка>
Спасибо за это! Я заметил ту же проблему в Joomla 3.
Во всяком случае, я решил это с помощью простого
$mailer = JFactory::getMailer();
(...)
$mailer->setBody($messagebody);
$mailer->AltBody =JMailHelper::cleanText( strip_tags( $messagebody));
Нет необходимости редактировать исходный код, и я думаю, что об этом следует сообщать как об ошибке (нужно иметь возможность установить AltBody так, как он подходит лучше), но было бы неплохо правильно его документировать или, возможно, иметь метод setAltBody(),