Magento主机名验证错误

时间:2014-07-29 08:35:12

标签: email magento zend-framework

当我尝试使用我正在开发的magento商店的电子邮件注册时,我遇到了以前没见过的错误  那说:

"Email" is not a valid hostname

does not appear to be a valid local network name

appears to be a DNS hostname but cannot match TLD against known list magento

当我进行研究时,我发现这些错误是由Zend主机名验证引起的。

是否有可能解决这些或根本没有解决方案

2 个答案:

答案 0 :(得分:1)

我遇到了相同的错误:

"Email" is not a valid hostname.
'example.example' appears to be a DNS hostname but cannot match TLD against known list
'example.example' appears to be a local network name but local network names are not allowed

从Magento 1开始,Zend似乎正在使用Tld的硬编码列表:

     /**
     * Array of valid top-level-domains
     *
     * @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt  List of all TLDs by domain
     * @see http://www.iana.org/domains/root/db/ Official list of supported TLDs
     * @var array
     */
    protected $_validTlds = array(
        'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa',
        [...]
        'ye', 'yt', 'yu', 'za', 'zm', 'zw'
    );

因此,有一些选择:


对于选项2 ,我们可以对以下文件进行安全升级,或参见选项3 添加$validator->getHostnameValidator()->setValidateTld(false);,并从中复制:

/lib/Zend/Validate/Hostname.php

至:

/app/code/local/Zend/Validate/Hostname.php

然后查找此代码块,并注释以下三行:

if (!in_array($this->_tld, $this->_validTlds)) {
  // $this->_error(self::UNKNOWN_TLD);
  // $status = false;
  // break;
}

对于选项3 ,我们可以对以下文件进行安全升级,并从进行复制:

app/code/core/Mage/Eav/Model/Attribute/Data/Abstract.php

至:

/app/code/local/Mage/Eav/Model/Attribute/Data/Abstract.php

然后替换此代码:

$validator = new Zend_Validate_EmailAddress();

作者:

// 1. we check mx record
$validator = new Zend_Validate_EmailAddress(
    array(
      'allow' => Zend_Validate_Hostname::ALLOW_DNS,
      'mx'    => true
    )
);
// 2. we remove TLD validation :
$validator->getHostnameValidator()->setValidateTld(false);

不要忘记查找可以在社区扩展或自定义扩展中使用的Zend_Validate_EmailAddress类的每个调用(例如:onestepcheckout)。

答案 1 :(得分:0)

有新的通用顶级域名扩展(gTLD)。这些是 会导致Zend Validator出现问题。

最好的解决方法是在Magento中禁用主机名验证 让最终用户正确输入域名:

找到Mage_Eav_Model_Attribute_Data_Abstract

变化

$validator = new Zend_Validate_EmailAddress();

$validator = new Zend_Validate_EmailAddress(array('domain'=>false));

或者你可以简单地install patch via composer