Fecha de publicación del tutorial: 2004-01-08
Desarrollo de un sistema de envío de correos utilizado base de datos.
1- INTRODUCCIÓN
A continuación pasaré a describir el proceso de realización de un sistema para el envío de correos (mailings) de forma automática utilizando un sistema de base de datos (Microsoft SQL Server).
Los pasos a seguir para este desarrollo son:
- Diseñar y maquetar el mailing que se desea enviar en formato html.
- Diseñar y creación de tablas para el sistema de base de datos de usuarios.
- Desarrollo, configuración y ejecución de la página de envío de mailings.
2- IMPLEMENTACIÓN DEL SISTEMA
2.1- Diseñar y maquetar el mailing en html que se desea enviar.
Es necesario diseñar y maquetar una página en html que nos servirá de mailing para enviar a nuestros usuarios, estos mailing pueden contener múltiples elementos gráficos, textos, flash, ... todos ellos deberán tener sus rutas puestas de modo absoluto al dominio, es decir, todas los elementos deben incluir como http://www.dominio/img/1.gif por ejemplo, nunca de forma relativa, por ejemplo: /img/1.gif, para que en los gestores de correo (outlook, pegasus, eudora, ...) se presenten correctamente.
Hay miles de consejos de marketing para la realización de estos mailings (correos llamativos, creativos, originales, directos, de poco tamaño, ...), en fin LA IMAGINACIÓN AL PODER!!!
Para este ejemplo utilizaremos el siguiente modelo.

El código de este ejemplo es el siguiente:
|
<HTML> <HEAD> <TITLE>Correo de prueba - Carixma</TITLE> </HEAD> <BODY bgColor=#cccccc background="http://www.carixma.com/img/tutoriales/fondo.gif" NOSEND="1" link="#075878" vlink="#9999FF"> <br> <TABLE cellSpacing=0 cellPadding=2 width=479 align=center bgColor=#000000 border=0 height="301"> <TR> <TD Align="Center"> <TABLE cellSpacing=0 cellPadding=10 bgColor=#ffffff border=0> <TR> <TD> <TABLE width="729" height="262" BORDER="1" align="left"> <TR> <TD valign=top width="729" height="294"> <br> <B><center><FONT face="Trebuchet MS, Verdana, Arial" color="#075878" size=5>MAILING DE PRUEBA</Font></center></B><br> <FONT Face="Verdana" size=2> <p align=center> No cree en el destino? Hoy es su día de suerte, ha encontrado el mejor tutorial del mundo!!!<br><br><br><br><br></p> <p align="left"> <font size="4" color="#0000ff"><b>CARIXMA.COM</b></font><font size="4" color="#000000"><b>, SERVICIOS PARA LOS PROFESIONALES Y PYMES</b></p> </font> <hr> <FONT Face="Verdana" size=2><p align="left">Pulse <a href="http://www.carixma.com" target="_blank">aquí</a> para disponer de infinidad de recursos y utilidades.</b><br></p></font> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </TD> </TR> <TR> <TD height="14"> <table cellspacing=0 cellpadding=3 width="100%" border=0 bordercolor="#0000CC"> <tr><td width="70%" bgcolor=#075878 height="17" align="left"><br><br></td></tr> </table> </TD> </TR> </TABLE> </BODY> <>/HTML> |
Para descargártelo pulsa aquí.
2.2- Diseñar y creación de tablas para el sistema de base de datos de usuarios.
Se necesita preparar una tabla, la denominaremos (tblMailings) con la información de nuestros usuarios, para este ejemplo sólo necesitaremos tener la dirección de correo (campo EMail) de tipo varchar y un identificador de usuario (campo IdUser) de tipo int (identity), pero se puede hacer tan compleja como se precise añadiendo la dirección, teléfonos, ...). El diseño de la tabla sería el siguiente:

El script correspondiente a esta tabla es:
CREATE TABLE [dbo].[mailings] (
[IdUser] [int] IDENTITY (1, 1) NOT NULL ,
[Email] [varchar] (150) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[mailings] WITH NOCHECK ADD
CONSTRAINT [PK_mailings] PRIMARY KEY CLUSTERED
(
[IdUser]
) ON [PRIMARY]
GO
2.3- Desarrollo, configuración y ejecución de la página de envío de mailings.
Finalmente, se desarrollan unas páginas asp que se encargan de seleccionar el rango de identificadores a los que enviar los mailings y de enviar los correos.
Para el envío de estos correos podemos utilizar dos componentes: SMTPsvgr o CDonts, dependiendo del sistema que se tenga instalado en el servidor, a continuación presentamos los códigos disponibles con ambos ejemplos, en estos archivos existe una variable "Cuerpo" donde debemos incluir el código del mailing realizado anteriormente, sustituyendo las dobles comillas ("), por una comilla simple (') para evitar problemas en el envío.
El código de estos ejemplos son los siguientes:
| Código de la página que utiliza Cdonts, para la gestión de los correos. |
|
Página 1 (send_cdonts.asp): <HTML> <HEAD> <title>Carixma.com: Servicios para profesionales y pymes</title> <meta http-equiv="TITLE" content="Carixma.com"> <meta name="description" content="Servicios para profesionales y empresas."> <meta name="robots" content="FOLLOW,INDEX"> <meta name="keywords" content="carisma, carixma, descargas, download, downloads, tutoriales, manuales, antivirus, alcala de henares, la garena, garena, virus, pymes, profesionales, trabajo, trabajar, empleo, empresa, candidatos, currículo, curriculo, currículum, curriculum, CV, laboral, ofertas de empleo, ofertas de trabajo, ofertas empleo, ofertas trabajo, bolsa sectorial, formación, formacion, franquicias, El pais, diario, periodico, newspaper, prensa, press, noticia, news, internacional, international, world, nacional, national, nation, españa, spain, información general;"> </HEAD> <body bgcolor="#ffffff" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" scroll="auto"> <form name="frmCarixma" method="post" action="send_bd_cdonts.asp"> <table width="100%" border="0" cellspacing="0" cellpadding="10"> <tr><td colspan="2" align="left" valign="middle"><font class="titularpagina">INTRODUZCA EL RANGO DE LOS IDENTIFICADORES</font> <img src="/img/carixma.gif" border="0" width="125" height="36" alt="Carixma"></td></tr> <tr><td width="20%" align="right">IdUser Inicial: </td><td width="80%" align="left"><input type="text" name="IdUserFirst" value="" size="50"></td></tr> <tr><td width="20%" align="right">IdUser Final: </td><td width="80%" align="left"><input type="text" name="IdUserLast" value="" size="50"></td></tr> <tr><td align="left" colspan="2"><input type="submit" name="Enviar" value="Enviar" style="cursor:hand"></td></tr> </table> </form> </body> </html> Página 2 (send_bd_cdonts.asp): <HTML> <HEAD> <title>Carixma.com: Servicios para profesionales y pymes</title> <meta http-equiv="TITLE" content="Carixma.com"> <meta name="description" content="Servicios para profesionales y empresas."> <meta name="robots" content="FOLLOW,INDEX"> <meta name="keywords" content="carisma, antivirus, alcala de henares, la garena, garena, virus, pymes, profesionales, trabajo, trabajar, empleo, empresa, candidatos, currículo, curriculo, currículum, curriculum, CV, laboral, ofertas de empleo, ofertas de trabajo, ofertas empleo, ofertas trabajo, bolsa sectorial, formación, formacion, franquicias, El pais, diario, periodico, newspaper, prensa, press, noticia, news, internacional, international, world, nacional, national, nation, españa, spain, información general;"> </HEAD> <body bgcolor="#FFFFFF" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" scroll="auto"> <% dim Cnn dim sSQL dim rstSQL dim Contador Contador = 0 Set Cnn = Server.CreateObject("ADODB.Connection") 'Se precisa incluir la cadena correcta Conexion = "Provider=SQLOLEDB;Data Source=SERVIDOR-SQL;Initial Catalog=www;User ID=login;Password=pwd;" Cnn.Open Conexion if err.number <> 0 then response.write (err.description) response.end end if sSQL = "select * from tblMailings where Iduser between " & request("IdUserFirst") & " and " & request("IdUserLast") & " Order by IdUser" Set rstSQL = Server.CreateObject("ADODB.Recordset") rstSQL.Open sSQL, Cnn, 1, 2 %> <table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td> <p><b>Información sobre mailings enviados.</b></p> <% Do while not (rstSQL.EOF) 'Envio de correo Set Mailer = server.CreateObject("CDonts.NewMail") Mailer.From = "info@dominio.es" Mailer.To = Email Mailer.Subject = "Publicidad: Envío de correo de prueba." Mailer.MailFormat = 0 ' Html Mailer.BodyFormat = 0 ' Html Cuerpo = "<HTML><HEAD><TITLE>Correo de prueba - Carixma</TITLE></HEAD><BODY bgColor=#cccccc background='http://www.carixma.com/img/tutoriales/fondo.gif' NOSEND='1' link='#075878' vlink='#9999FF'><br><TABLE cellSpacing=0 cellPadding=2 width=479 align=center bgColor=#000000 border=0 height='301'><TR><TD Align='Center'><TABLE cellSpacing=0 cellPadding=10 bgColor=#ffffff border=0><TR><TD><TABLE width='729' height='262' BORDER='1' align='center'><TR>" Cuerpo = Cuerpo & "<TD valign=top width='729' height='294'><br><B><center><FONT face='Trebuchet MS, Verdana, Arial' color='#075878' size=5>MAILING DE PRUEBA</Font></center></B><br><FONT Face='Verdana' size=2><p align=center> No cree en el destino? Hoy es su día de suerte, ha encontrado el mejor tutorial del mundo!!!<br><br><br><br><br></p><p align='center'> <font size='4' color='#0000ff'><b>CARIXMA.COM</b></font><font size='4' color='#000000'><b>, SERVICIOS PARA LOS PROFESIONALES Y PYMES</b></p></font><hr><FONT Face='Verdana' size=2><p align='center'>Pulse <a href='http://www.carixma.com' target='_blank'>aquí</a> para disponer de infinidad de recursos y utilidades.</b><br></p></font></TD></TR></TABLE></TD></TR></TABLE></TD></TR><TR><TD height='14'>" Cuerpo = Cuerpo & "<table cellspacing=0 cellpadding=3 width='100%' border=0 bordercolor='#0000CC'><tr><td width='70%' bgcolor=#075878 height='17' align='center'><br><br></td></tr></table></TD></TR></TABLE></BODY></HTML>" Mailer.Body = Cuerpo Mailer.Send Set Mailer = Nothing Contador = Contador + 1 rstSQL.MoveNext Loop response.write "Enviados: " & Contador & " correos." 'Cerramos los objetos rstSQL.Close Cnn.Close Set rstSQL = Nothing Set Cnn = Nothing %> </td> </tr> </table> </body> </html> |
| Código de la página que utiliza SMTPsvg, para la gestión de los correos. |
|
Página 1 (send_smtpsvg.asp): <HTML> <HEAD> <title>Carixma.com: Servicios para profesionales y pymes</title> <meta http-equiv="TITLE" content="Carixma.com"> <meta name="description" content="Servicios para profesionales y empresas."> <meta name="robots" content="FOLLOW,INDEX"> <meta name="keywords" content="carisma, carixma, descargas, download, downloads, tutoriales, manuales, antivirus, alcala de henares, la garena, garena, virus, pymes, profesionales, trabajo, trabajar, empleo, empresa, candidatos, currículo, curriculo, currículum, curriculum, CV, laboral, ofertas de empleo, ofertas de trabajo, ofertas empleo, ofertas trabajo, bolsa sectorial, formación, formacion, franquicias, El pais, diario, periodico, newspaper, prensa, press, noticia, news, internacional, international, world, nacional, national, nation, españa, spain, información general;"> </HEAD> <body bgcolor="#ffffff" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" scroll="auto"> <form name="frmCarixma" method="post" action="send_bd_smtpsvg.asp"> <table width="100%" border="0" cellspacing="0" cellpadding="10"> <tr><td colspan="2" align="left" valign="middle"><font class="titularpagina">INTRODUZCA EL RANGO DE LOS IDENTIFICADORES</font> <img src="/img/carixma.gif" border="0" width="125" height="36" alt="Carixma"></td></tr> <tr><td width="20%" align="right">IdUser Inicial: </td><td width="80%" align="left"><input type="text" name="IdUserFirst" value="" size="50"></td></tr> <tr><td width="20%" align="right">IdUser Final: </td><td width="80%" align="left"><input type="text" name="IdUserLast" value="" size="50"></td></tr> <tr><td align="left" colspan="2"><input type="submit" name="Enviar" value="Enviar" style="cursor:hand"></td></tr> </table> </form> </body> </html> Página 2 (send_bd_smtpsvg.asp): <HTML> <HEAD> <title>Carixma.com: Servicios para profesionales y pymes</title> <meta http-equiv="TITLE" content="Carixma.com"> <meta name="description" content="Servicios para profesionales y empresas."> <meta name="robots" content="FOLLOW,INDEX"> <meta name="keywords" content="carisma, antivirus, alcala de henares, la garena, garena, virus, pymes, profesionales, trabajo, trabajar, empleo, empresa, candidatos, currículo, curriculo, currículum, curriculum, CV, laboral, ofertas de empleo, ofertas de trabajo, ofertas empleo, ofertas trabajo, bolsa sectorial, formación, formacion, franquicias, El pais, diario, periodico, newspaper, prensa, press, noticia, news, internacional, international, world, nacional, national, nation, españa, spain, información general;"> </HEAD> <body bgcolor="#FFFFFF" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" scroll="auto"> <% dim Cnn dim sSQL dim rstSQL dim Contador Contador = 0 Set Cnn = Server.CreateObject("ADODB.Connection") 'Se precisa incluir la cadena correcta Conexion = "Provider=SQLOLEDB;Data Source=SERVIDOR-SQL;Initial Catalog=www;User ID=login;Password=pwd;" Cnn.Open Conexion if err.number <> 0 then response.write (err.description) response.end end if sSQL = "select * from tblMailings where Iduser between " & request("IdUserFirst") & " and " & request("IdUserLast") & " Order by IdUser" Set rstSQL = Server.CreateObject("ADODB.Recordset") rstSQL.Open sSQL, Cnn, 1, 2 %> <table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td> <p><b>Información sobre mailings enviados.</b></p> <% Do while not (rstSQL.EOF) 'Envio de correo Set Mailer = Server.CreateObject("SMTPsvg.Mailer") Mailer.RemoteHost = "smtp.dominio.com" Mailer.Charset = 2 'Utilizamos UNICODE Mailer.ContentType = "text/html" Mailer.FromName = "Publi" Mailer.FromAddress = "info@Dominio.com" Mailer.Subject = "Publicidad: Correo de Pruebas." Mailer.AddRecipient "Usuario", rstSQL("Email") Cuerpo = "<HTML><HEAD><TITLE>Correo de prueba - Carixma</TITLE></HEAD><BODY bgColor=#cccccc background='http://www.carixma.com/img/tutoriales/fondo.gif' NOSEND='1' link='#075878' vlink='#9999FF'><br><TABLE cellSpacing=0 cellPadding=2 width=479 align=center bgColor=#000000 border=0 height='301'><TR><TD Align='Center'><TABLE cellSpacing=0 cellPadding=10 bgColor=#ffffff border=0><TR><TD><TABLE width='729' height='262' BORDER='1' align='center'><TR>" Cuerpo = Cuerpo & "<TD valign=top width='729' height='294'><br><B><center><FONT face='Trebuchet MS, Verdana, Arial' color='#075878' size=5>MAILING DE PRUEBA</Font></center></B><br><FONT Face='Verdana' size=2><p align=center> No cree en el destino? Hoy es su día de suerte, ha encontrado el mejor tutorial del mundo!!!<br><br><br><br><br></p><p align='center'> <font size='4' color='#0000ff'><b>CARIXMA.COM</b></font><font size='4' color='#000000'><b>, SERVICIOS PARA LOS PROFESIONALES Y PYMES</b></p></font><hr><FONT Face='Verdana' size=2><p align='center'>Pulse <a href='http://www.carixma.com' target='_blank'>aquí</a> para disponer de infinidad de recursos y utilidades.</b><br></p></font></TD></TR></TABLE></TD></TR></TABLE></TD></TR><TR><TD height='14'>" Cuerpo = Cuerpo & "<table cellspacing=0 cellpadding=3 width='100%' border=0 bordercolor='#0000CC'><tr><td width='70%' bgcolor=#075878 height='17' align='center'><br><br></td></tr></table></TD></TR></TABLE></BODY></HTML>" Mailer.BodyText = Cuerpo Mailer.SendMail Set Mailer = Nothing Contador = Contador + 1 rstSQL.MoveNext Loop response.write "Enviados: " & Contador & " correos." 'Cerramos los objetos rstSQL.Close Cnn.Close Set rstSQL = Nothing Set Cnn = Nothing %> </td> </tr> </table> </body> </html> |
Descripción del proceso: Inicialmente se presenta una página donde se solicita el rando de identificadores de usuarios a los que se desea enviar el mailing, una vez aceptados estos datos, en la siguiente página se comienza la gestión y envío, conectándose a la base de datos, y cargando una select que apunta a la tabla mailings para cargar aquellos registros que se desean recuperar y finalmente mediante el objeto CDonts o SMTPsvg se configuran los correos a enviar.
Descargar Fichero SMTPsvgr -- Descargar Fichero CDonts
Los archivos .asp de estos ficheros, se deben colocar en el servidor y ejecutarlos, por ejemplos en: (http://www.dominio.com/mailings/send_smtpsvg.asp ó http://www.dominio.com/mailings/send_cdonts.asp), si todo va bien se presentará el número de mailings enviado.
Es aconsejable hacer grupos de envíos de unos 100 correos aproximadamente, cada vez que se ejecute la página, dependiendo de la velocidad de ejecución de nuestro sistema.
Espero que os haya servido de ayuda.












