Zend Framework主机名Email Validator在yahoo.gr上失败

时间:2018-05-03 13:43:03

标签: php validation zend-framework2 zend-framework3

我正在使用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。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

从您的错误中,我能看到的唯一问题是空白' yahoo.gr' 会导致验证失败。

修正建议1:

您应该在GET / POST"电子邮件"上开始使用trim()值。

修正建议2:

顺便提一下documentation

仅验证本地部分

如果您需要Zend \ Validator \ EmailAddress仅检查电子邮件地址的本地部分,并且想要禁用主机名的验证,则可以将domain选项设置为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";
    }
}

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

结束。