Zend Framework 主机名电子邮件验证器在 yahoo.gr 上失败

Zend Framework hostname Email Validator fails on yahoo.gr

我正在使用 zend 框架发送电子邮件。我有一个 Hostname::ALLOW_DNS 验证器。尝试向 yahoo.gr 发送电子邮件时失败。我收到此错误:

An error occurred
An error occurred during execution; please try again later.
Additional information:
Zend\Mail\Exception\InvalidArgumentException
File:
/var/www/file/project/vendor/zendframework/zendframework/library/Zend/Mail/Address.php:41
Message:
'yahoo.gr ' is not a valid hostname for the email address

电子邮件是 smth@yahoo.gr。有什么建议吗?

从你的错误中,我能看到的唯一问题是空格 'yahoo.gr ',它 will/can 导致验证失败。

修复建议 1:

您应该开始在 GET/POST "email" 值上使用 trim()

修复建议 2:

顺便在documentation:

只验证本地部分

如果您需要 Zend\Validator\EmailAddress 只检查电子邮件地址的本地部分,并希望禁用主机名验证,您可以将域选项设置为 FALSE。这会强制 Zend\Validator\EmailAddress 不验证电子邮件地址的主机名部分。

$validator = new Zend\Validator\EmailAddress();
$validator->setOptions(array('domain' => FALSE));

修复建议 3:

documentation 顺便说一句:

验证不同类型的主机名

电子邮件地址的主机名部分根据 Zend\Validator\Hostname 进行验证。默认情况下,仅接受 domain.com 形式的 DNS 主机名,但如果您愿意,也可以接受 IP 地址和本地主机名。

为此,您需要实例化 Zend\Validator\EmailAddress 并传递一个参数来指示您要接受的主机名类型。 Zend\Validator\Hostname 中包含更多详细信息,但下面显示了如何接受 DNS 和本地主机名的示例:

$validator = new Zend\Validator\EmailAddress(
                    Zend\Validator\Hostname::ALLOW_DNS |
                    Zend\Validator\Hostname::ALLOW_LOCAL);
if ($validator->isValid($email)) {
    // email appears to be valid
} else {
    // email is invalid; print the reasons
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

好了,没有更多的建议了。祝你好运!

结束。