Magento“忘记密码”电子邮件以错误的语言发送

Posted

技术标签:

【中文标题】Magento“忘记密码”电子邮件以错误的语言发送【英文标题】:Magento "Forgot Password" email sent in wrong language 【发布时间】:2013-06-28 08:22:54 【问题描述】:

我有一个包含多种语言的 Magento 网站。我已经设置了语言包,网站上的所有内容似乎都可以正确翻译。此外,交易电子邮件以正确的语言发送除了“忘记密码电子邮件,该电子邮件始终以德语发送。这是我所做的:

已安装语言包并确保所有模板和文件夹结构正确。示例:/app/locale/nl_NL/template/email/系统 » 交易电子邮件下:我应用了模板,选择了区域设置并保存。 然后我转到系统 » 配置 » 销售电子邮件,从“当前配置范围”下拉菜单切换到每种语言,并选择我在其中创建的模板每种语言的交易电子邮件(每个商店视图)。

在网上四处寻找解决方案后,似乎其他人也遇到了这个问题,并且有人提到 Magento 正在从 /app/locale/ 中找到的第一个语言环境文件夹中选择“忘记密码”模板.就我而言,我有:de_DEen_USfr_FRnl_NL。所以它从德国 de_DE 包中挑选模板。

注意:另外,在“配置”下的后端,左侧有一个名为“LOCALE PACKS”的选项卡,它下面只有“Locale de_DE”,即使我有其他语言包不要出现在这里。不确定这是否相关。

网站:http://site1.cp1.glimworm.com/magento/

Magento 社区版本:1.7.0.2

语言环境包:

Mage_Locale_en_US Lo​​cale_Mage_community_de_DE Lo​​cale_Mage_community_fr_FR Mage_Locale_nl_NL

知道如何从要发送的相应语言中获取正确的电子邮件模板,而不是始终使用德语吗? 任何帮助将不胜感激!我也可以提供更多信息。

【问题讨论】:

没人有解决办法吗? :( 【参考方案1】:

我在 magento v1.5 中遇到了同样的问题。经过长时间的研究,我发现了这个解决方案并且它对我有用。

Mage/Customer/Model/Customer.php

in this file i have make some changes as following.
find this line of code
if (!$storeId) 

    $storeId = $this->_getWebsiteStoreId($this->getSendemailStoreId());


and replace with

$storeId = ($storeId == '0')?$this->getSendemailStoreId():$storeId;
if ($this->getWebsiteId() != '0' && $storeId == '0') 

    $storeIds = Mage::app()->getWebsite($this->getWebsiteId())->getStoreIds();
    reset($storeIds);
    $storeId = current($storeIds);

【讨论】:

谢谢!虽然它对我不起作用。现在刚刚尝试过,但同样的事情发生了:所有“忘记密码”的邮件都是用德语发送的:(但我也在使用 v1.7,所以也许有区别?【参考方案2】:

我遇到了同样的问题,看起来 user2282917 的解决方案只需稍作修改即可:

您应该编辑 Customer.php 中的 sendPasswordResetConfirmationEmail 函数,而不是 sendNewAccountEmail。尝试替换那里的代码,它会工作。

【讨论】:

【参考方案3】:

覆盖 AccountController.php 上的 forgotPasswordPostAction 控制器。 您需要设置正确的商店 ID,以便使用区域设置。

/**
 * Forgot customer password action
 */
public function forgotPasswordPostAction()

    $email = (string) $this->getRequest()->getPost('email');
    if ($email) 
        if (!Zend_Validate::is($email, 'EmailAddress')) 
            $this->_getSession()->setForgottenEmail($email);
            $this->_getSession()->addError($this->__('Invalid email address.'));
            $this->_redirect('*/*/forgotpassword');
            return;
        

        /** @var $customer Mage_Customer_Model_Customer */
        $customer = $this->_getModel('customer/customer')
            ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
            ->loadByEmail($email);

        if ($customer->getId()) 
            try 
                $newResetPasswordLinkToken =  $this->_getHelper('customer')->generateResetPasswordLinkToken();
                $customer->changeResetPasswordLinkToken($newResetPasswordLinkToken);

                // Add store ID so that correct locale will be set
                $customer->setStoreId(Mage::app()->getStore()->getId());

                $customer->sendPasswordResetConfirmationEmail();
             catch (Exception $exception) 
                $this->_getSession()->addError($exception->getMessage());
                $this->_redirect('*/*/forgotpassword');
                return;
            
        
        $this->_getSession()
            ->addSuccess( $this->_getHelper('customer')
            ->__('If there is an account associated with %s you will receive an email with a link to reset your password.',
                $this->_getHelper('customer')->escapehtml($email)));
        $this->_redirect('*/*/');
        return;
     else 
        $this->_getSession()->addError($this->__('Please enter your email.'));
        $this->_redirect('*/*/forgotpassword');
        return;
    

【讨论】:

【参考方案4】:

在下面的文件中 Mage/Customer/Model/Customer.php

在 sendPasswordResetConfirmationEmail 函数()中更改

$storeId = $this->getStoreId();

$storeId = Mage::app()->getStore()->getStoreId();

谢谢

【讨论】:

【参考方案5】:

在我们的例子中...我们发现当管理员创建客户帐户时,“电子邮件发送自”选项未保存,仅用于第一个帐户创建电子邮件。任何后续发送的电子邮件都是从分配给客户的网站的默认商店视图发送的。

真正的问题是,当没有设置客户商店 id 时如何识别。

方法 sendPasswordResetConfirmationEmail (Magento 1.9.1) 当 store id 为 0(管理员或未设置)时,默认为 _getWebsiteStoreId 它将返回第一个关联的 store id到那个网站。

问题在于 Magento 假定与网站 id 关联的第一个商店 id 是默认商店...我们发现当针对商店记录设置排序顺序时,情况并非如此。

简单地说,确保与网站相关联的默认商店也以 0 的排序顺序指定。

【讨论】:

【参考方案6】:

希望this link对你有用

在链接中,他们使用了新密码,但在第 4 步中使用忘记密码模板代替了新密码

谢谢..

【讨论】:

感谢您的信息!我确实尝试过这个,实际上我已经有了他们在示例中使用的相同模板。但后来我实际上尝试同时使用另一个模板,但没有任何区别。我在邮件中收到了相同的德语模板。【参考方案7】:

密码重置电子邮件发送至Mage_Customer_Model_Customer::_sendEmailTemplate()。此处已加载电子邮件模板。如果它是在“Systemn > Transactional Emails”中的 admin 中加载并配置为使用,则将使用您的模板。

否则默认模板从Mage_Core_Model_Email_Template::sendTransactional 中的文件加载。这是使用$this->loadDefault($templateId, $localeCode); 完成的,模板是使用

加载的
$templateText = Mage::app()->getTranslator()->getTemplateFile(
            $data['file'], 'email', $locale
        );

这里的语言环境文件夹按以下顺序检查:

    指定的语言环境 默认商店的区域设置 en_US 语言环境

选择第一个匹配的语言环境。由于Mage::app() 不知道通过电子邮件模板传递的存储,因此加载了默认的默认存储,在您的情况下是德语。它与语言环境文件夹的顺序无关。

因此,在您的情况下,我建议检查您的电子邮件模板是否在“系统 > 配置 > 客户配置 > 密码选项”的管理员配置中被选中,或者使用 Mage::getStoreConfig(Mage_Customer_Model_Customer::XML_PATH_REMIND_EMAIL_TEMPLATE, $storeId)(如果已为您的商店设置)。

【讨论】:

【参考方案8】:

您收到不同于预期语言的电子邮件模板的原因取决于您首次创建帐户时使用的语言。首次创建帐户时,请尝试使用您自己的语言进行检查。

在“客户”>“帐户信息”下选中此项,了解您的帐户是如何创建的。

/卡利夫

【讨论】:

以上是关于Magento“忘记密码”电子邮件以错误的语言发送的主要内容,如果未能解决你的问题,请参考以下文章

Magento密码重置不起作用

如何在 Magento 中覆盖忘记密码消息

使用设计发送重置密码说明

忘记密码没有向我的Gmail帐户发送邮件[重复]

Laravel 5.2 忘记密码的模式弹出窗口显示 500 内部服务器错误,同时运行 ajax 功能

PHP发送忘记密码的电子邮件