Почта 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(),

Другие вопросы по тегам