envío de correo con CDO a muchos destinatarios

554 views
Skip to first unread message

DIEGO A. CALLEGARI

unread,
Jul 16, 2011, 10:21:02 AM7/16/11
to publice...@googlegroups.com

Estimados:

 

                        Se me presenta la siguiente situación.

 

                        ¿Cómo puedo hacer utilizando CDO, para enviar correos a múltiples destinatarios, sin enviar de a 1 correo a la vez?

 

                        Siendo que una variable no puede tener mas de 254 caracteres, no puedo incluir mas de 5, 10 o 15 destinatarios dependiendo de la longitud de la dirección de mail, y si tengo que enviar a una lista de 400 destinatarios, debería realizar el procedimiento cerca de 26 veces en el mejor de los casos.

 

                        Aguardo por sus siempre creativas soluciones, un abrazo.

 
Diego A. Callegari

 

Luis Mata

unread,
Jul 16, 2011, 10:59:02 AM7/16/11
to publice...@googlegroups.com
una tabla de correos y scan endscan

Victor Espina

unread,
Jul 16, 2011, 11:21:10 AM7/16/11
to publice...@googlegroups.com
Creo que la pregunta viene por el lado de que enviar el mismo correo individualmente a varios destinatarios de una lista es mucho mas lento que enviar el correo solo una vez a multiples destinatarios.  CDO es muy bueno, pero hay que reconocer que puede ser bastante lento para procesar la llamada a Send().

Ahora, definitivamente VFP tiene un limite para el tamano de una variable tipo string, pero no es 254 sino 16,777,184 (tomado de aqui)., asi que con esa capacidad son muchas las direcciones que puedes acomodar.  Ahora, otra cosa es cual es el tamano maximo que puede tener la propiedad To de la clase CDOMessage. Lamentablemente no pude conseguir ninguna referencia en Google sobre elsto, sin embargo si consegui un articulo donde explicaban las multiples razones por las que hacer spam no es buena idea.

Dicho esto, creo que lo primero que tienes que decidir es si quieres seguir con la idea de enviar un unico correo a muchos destinatarios o si mejor envias el mismo correo a cada destinatario individualmente.  Si decides ir por la primera opcion, entonces te recomendaria lo siguiente:

a) Haz una primera version que envie el correo de una sola vez a todos los destinatarios, asegurandote que tu programa te avise visualmente el tamano total en caracteres y el numero total de direcciones incluidas en la variable string que contiene la lista de destinatarios. La idea de esto es tener un limite de string y direcciones que sabes funcionara bien.

b) Modifica tu rutina para preparar el objeto CDOMessage con todos los datos a excepcion de la propiedad To

c) Luego inicia un ciclo que recorra todos los destinatarios uno por uno

d) Verifica si el valor actual de cTo + la direccion del destinatario actual supera en longitud o numero de direcciones al limite establecido en  el punto a). Si no es asi, incluye la direccion en cTo, pasa al siguiente registro en la lista y repite este paso.

e) Si el valor actual de cTo + la direccion de destinoatario actual suipera en longitud o numero de direcciones al limite establecido en el punto a), asignas el valor de cTo a la propiedad To del mensaje e invocas a Send(). Una vez hecho hesto, haces cTo = "", pasas al siguiente destinatario y repites el paso d).

f) Una vez recorrida toda la lista de destinatarios, verifica si cTo esta vacia. Si no es asi, asigna cTo a la propiedad To dle mensaje e invoca a Send().

Lo que buscas aqui es, primero determinar la cantidad de correos que puedes enviar con CDO sin problemas,(llamemoslo n), para luego enviar un correo cada "n" direcciones, es decir, si puedes enviar 20 correos simultaneamente sin problemas, y tienes 50 destinatarios, enviarias el correo 3 veces; dos veces con 20 destinatarios y uno final con 10.

Saludos

Victor Espina

Desarrollos EfiMax

unread,
Jul 16, 2011, 12:31:34 PM7/16/11
to publice...@googlegroups.com
Otro escenario complementario al de Víctor Espina que es
importante considerar es el del Servidor de correo SMTP de tu proveedor.
 
Algunos proveedores califican duramente el SPAM, esto es
dado que es más rápido para ti como sender, la carga
de trabajo va a ser procesada por el servidor, esto es que
si te envias por ejemplo 1,000 destinatatios en CCO
esto reppresenta que el servidor va a mandar tu correo que enviaste
una vez  1,000 veces y procesar los correos de seguimiento como
el no se encontro el destinatario, se reintera nuevamente en x horas,
casilla llena,etc. lo cual representa uso de CPU, RAM y
ancho de banda del proveedor y cuando detectan este
tipo de comportamiento regularmente bloquean tu
cuenta.
 
Por lo que es importante que contactes al proveedor del
servidor SMTP paa saber dentro de que paramentros puedes
enviar emails con multiples destinatarios antes de armar los
correos para evitar que tu cuenta sea bloqueada.
 
Que estés bien.
=====================================
Desarrollos EfiMax
Ing. Carlos Omar Figueroa López
http://www.efimax.com.mx
Hermosillo,Sonora
=====================================

Victor Espina

unread,
Jul 16, 2011, 12:47:55 PM7/16/11
to publice...@googlegroups.com
Excelente acotacion Carlos.

Victor Espina

Reply all
Reply to author
Forward
0 new messages