PDA

Ver la Versión Completa : ¿Cómo se reparte la carga del envío de correo electrónico?


dec
22-10-2006, 15:29:08
Hola,

Me ha surgido una duda sobre el envío de correo electrónico desde PHP en particular, pero, también en general, desde cualquier lenguaje, utilizando el protocolo oportuno y las funciones o clases que se utilizen en cada caso.

Supongamos una aplicación que publica noticias. Los usuarios pueden leer estas noticias y, si quieren, pueden enviar una nota sobre las mismas a la dirección de correo electrónico de algún conocido.

En PHP contamos (entre otras) con la función "mail" que se encarga de enviar correos electrónicos desde el Servidor SMTP oportuno. Pues bien, me he percatado de que uno puede enviar más de un correo al mismo tiempo, sencillamente, separando las direcciones por comas.

En realidad esto lo sabía hace tiempo, pero, ha sido ahora cuando me lo he planteado del siguiente modo: ¿cuesta más enviar un correo a una dirección que a diez, por poner un caso? La función "mail" se ejecuta una sola vez en todo caso, entonces, ¿quién se encarga de enviar los diez correos en lugar de uno solo?

Concretando un poco más mi duda, ¿significa una mayor carga para el Servidor de la aplicación el que se envíe correo a diez destinatarios a la vez? ¿El Servidor SMTP tendrá que hacer lo mismo diez veces o solamente una? Pero el correo tendrá que llegar a diez destinatarios, no a uno, por poner por caso, ¿eso es más costoso? ¿en qué sentido? ¿quién se divide ese costo y la carga que representa, si es que es tal carga?

Bueno. No sé si me expliqué más o menos. Espero que me entendieran, pero, ya saben que estoy por aquí si es que necesitan que les explicite algo y aun algos más sobre mi duda. En todo caso muchas gracias como siempre por estar ahí y por las respuestas que sabéis y podéis y dáis a cuantas dudas se plantean en estos Foros.

PD. Todo esto ha surgido porque me he dado cuenta de que cierta función que utilizo para validar direcciones de correo electrónico funciona... regular. ¿Porqué? Porque es capaz de distinguir entre una dirección de correo sintácticamente válida de una que no lo es, pero, en caso de comprobarse una "entrada" tal que esta:


pepe@pepe.com,juan@juan.com


Resulta que la función valida, es decir, para la función "el correo" resulta válido sintácticamente. Pues bien, antes de "retocar" en lo necesario la función para que no permita más de una dirección de correo (otra cosa será cómo hacer esto) lo cierto es que me pregunto si merece la pena, es decir, si no será acaso igual de costoso enviar un correo que tres, por poner un caso. Lo que sí quisiera hacer es delimitar la cantidad de caracteres de la entrada de usuario, puesto que una cosa es enviar cinco correo y otra quinientos... lo primero podría considerarse "normal", lo segundo creo que no.

Por cierto, la función que refiero, ahora mismo queda de este modo:


function Email($entrada)
{
if(!Validar::Longitud($entrada, 300))
return false;

$pattern = '/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@';
$pattern .= '([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]{2,4})/';
return preg_match($pattern, $entrada);
}


Es decir, no se permite una entrada de más de 300 caracteres y dicha entrada tiene que ser una dirección de correo electrónico (¿una?) válida sintácticamente.

gabrielflowers
05-04-2008, 17:26:52
interesante pregunta dec, pero si tu pregunta estuviera orientado a validar la sintaxis del correo (o de los correos, mas de uno, separados por comas), pues la solucion seria elaborar una expresion regular un poco mas trabajada pues no?, lo demas que planteas es interesante sin duda, quizas algun experto colabore en dar respuestas a estas dudas

keyboy
05-04-2008, 19:01:10
En cuanto a la repartición de carga no tengo gran idea. Supongo que si mandas a diez direcciones, el servidor SMTP tiene que mandarlo diez veces, si no, ¿quién se encargaría de repartirlo a cada dirección?

De todas formas, a no ser que explícitamente quieras mandar a más de una dirección, yo optaría por ajustar tu función validadora. Tal como la tienes me parece que acepta demasiadas cosas, por ejemplo:

pedro@el.lobo..y.tu.mama.tambien..

porque la parte en negritas satisface al patrón. Creo que te has olvidado de ponerle un $ al final tal como le pusiste ^ al comienzo. Tal como está, una vez que tienes una parte correcta (pedro@el.lobo), después puede haber cualquier cosa, deja tú las comas, cualquier cosa.

Entonces, más que restringir el número de caracteres, ajusta para que restrinja a una sóla dirección, aunque sea de 500 caracteres.

Otra cosa es que no sé porqué usas {2,4}. Desconozco si hay una longitud mínima pero desde luego no creo que haya una máxima, mucho menos 4.

Bye

dec
05-04-2008, 19:09:17
Hola,

Después de casi dos años revivió este hilo. ;) Respecto de la expresión regular keyboy, bueno, tengo que decir que no la hice yo. Me limité a copiarla de algún sitio, probablemente. Igual que esta que se usa en esta función, que es la que vengo utilizando para validar direcciones de correo actualmente:


function EmailAddress($input){
$pattern = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i";
return preg_match($pattern, $input);
}


Me doy cuenta de que ahí ya se tiene en cuenta el "final" ($) al que haces referencia. Veo, sin embargo, que sigue usándose un "{2,6}" para limitar el rango de caracteres del, cómo se llama... el sufijo del dominio, ".com", por ejemplo. Ignoro ahora mismo si, efectivamente, este rango puede ser limitado. Igual que antes, esta expresión regular debí cogerla "de por ahí"... (salud para su autor).

Supongo que en esto también habría que llegar a un compromiso. Aunque, si de verdad existiera una "sintaxis" para las direcciones de correo... igual podría lograrse la expresión regular perfecta. Si esto es así, que no lo pongo en duda, me pregunto porqué hay tantas entonces... :D

keyboy
05-04-2008, 19:18:48
¡Vaya! Yo sólo me fije en la fecha del último mensaje :o

Pero eso pasa por no poner aquí la forma en que lo habías solucionado :D

Bye

D-MO
05-04-2008, 22:15:22
¡Vaya! Yo sólo me fije en la fecha del último mensaje :o

Pero eso pasa por no poner aquí la forma en que lo habías solucionado :D

Bye

http://www.clubdelphi.com/foros/images/botones/infraction.gif (http://clubdelphi.com/foros/infraction.php?do=report&p=277818) Para David
Y que un moderador vea si lo expulsa definitivamente del club:rolleyes:

Saludos

Emilio
13-04-2008, 23:27:34
Y que un moderador vea si lo expulsa definitivamente del club:rolleyes:

Bueno lo estamos votando, ya veremos el resultado :D

Ya está todo tratado sobre el hilo exceptuando la carga del servidor. Para el SMTP es lo mismo que se ejecuten 500 veces la función mail() o que la función mail() contenga 500 recipientes, él se limitará a transportar las 500 peticiones llegen desde una u otra forma, así pues lo que habría que ver, es el código de la función mail() para saber si 500 instancias cargan por igual a 500 recipientes.

En cualquier caso puedo asegurarte que ese volumen es insignificante para cualquier servidor.