运行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)
我挖掘代码并发现libraries / joomla / mail / mail.php没有为Text等效设置AltBody;我试过了:
public function setBody($content)
{
[...]
if (empty($this->AltBody))
$this->AltBody =JMailHelper::cleanText( strip_tags( $content));
它有效! (在邮件测试员上的10/10)。但肯定是丑陋的。
我的问题是:
否则我会写一个插件来执行覆盖:这非常重要 我们失去了20%似乎无法在gmail中找到垃圾邮件文件夹的客户!!!,我真的不觉得核心攻击30个网站。
答案 0 :(得分:4)
肯定是可以向CMS提交的错误。系统应该为您处理它。以下是如何开始提交错误:https://github.com/joomla/joomla-cms/blob/master/CONTRIBUTING.md
此外,您可以编写一个插件来处理他的覆盖,而不是像您所说的那样黑客攻击核心文件。我已经整理了一个基础插件,允许您根据需要覆盖核心类:https://gist.github.com/dongilbert/3237387
正如你所看到的那样,没有太复杂的事情发生在那里。我们首先确保我们在Joomla,否则退出。然后在Joomla命名约定之后定义类,并在类构造中包含我们的配置文件。配置文件是类注册到自动加载器的位置。
在配置文件中,我们定义OVERRIDES路径,然后开始将类注册到JLoader。我喜欢保持组织有序,所以我的覆盖目录镜像根joomla目录的结构,只包含我想要覆盖的类的路径。这意味着如果我想覆盖JFormField,我会有这样的结构(包括覆盖目录):
overrides/libraries/joomla/form/field.php
然后在config.php中我会添加:
JLoader::register('JFormField', OVERRIDES.'/libraries/joomla/form/field.php', true);
您也可以使用它来覆盖核心组件类。我使用它来覆盖com_media中的视图类,如下所示:
overrides/component/com_media/view/imageslist/view.html.php
然后将其添加到配置中:
JLoader::register('MediaViewImagesList', OVERRIDES.'/components/com_media/view/imageslist/view.html.php', true);
您可以从上面的gist链接下载该插件。它已准备好安装到您的Joomla站点。首先上传它,然后在plugin目录中添加覆盖目录。如果要首先添加所有文件并上载,请确保将以下内容添加到overrides.xml文件中。
<folder>overrides</folder>
答案 1 :(得分:2)
谢谢! 我在Joomla 3中注意到了同样的问题。
无论如何,我用一个简单的
解决了它$mailer = JFactory::getMailer();
(...)
$mailer->setBody($messagebody);
$mailer->AltBody =JMailHelper::cleanText( strip_tags( $messagebody));
不需要编辑源代码,我也不认为这应该被报告为bug(一个应该能够设置AltBody,因为它更适合) - 但是如果正确记录它,或者可能有一个setAltBody会很好()方法。