Puede ser simplemente que el Zend_Engine se ajuste estrictamente al RFC (que tiene 3 millas de largo, para los correos electrónicos). Sospecho que, estrictamente hablando, los períodos son caracteres permitidos, pero un período justo antes de que la posición @ no esté permitida, por lo que ese es probablemente el problema.
Voy a suponer que gmail todavía permitirá el envío de john.doe. @ Gmail.com. Si ese es el caso, la pregunta se trata más bien de si realmente desea coincidir estrictamente con el RFC, o simplemente ser permisivo en las direcciones de correo electrónico permitidas para los casos en que no dañe su sistema.
Si le preocupa la inyección sql, enlace sus variables en sql & escapé de su html, porque no hay garantía de que una coincidencia estricta del rfc realmente evitará tales problemas.
Si le preocupan los correos electrónicos que pueden enviarse o recibirse, le aconsejo que simplemente los envíe con la expectativa de recibirlos o que configure un sistema de confirmación de correo electrónico opcional utilizando un enlace de confirmación.
Si le preocupa la inyección de encabezado de correo electrónico, esa es una buena razón para usar una biblioteca de correo electrónico al enviar correo, supongo que zend tiene una robusta.
TooLongDidn'tRead; mi consejo es:
- Sea permisivo. (por lo tanto, use la opción que sea más permisiva, en este caso filter_input)
- Compruebe si un correo electrónico funciona enviando el correo electrónico, es casi la única prueba verdadera.
- html-escape & sql-ata todo cuando sea el momento de usarlo en html o sql, y no confíe en nada que pueda venir del mundo peligroso más allá cada vez que lo use.
- No utilice el php mail explotable(), utilice una biblioteca que evitará la inyección de encabezado de correo.
Si quiere el mejor validador de correo php, vaya aquí: http://www.dominicsayers.com/isemail/ – rojoca