El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script VBScript Para Enviar Correos De Aviso De Cambio De Dirección (disclaimer)

Posted by urpiano en Miércoles 11 \11\UTC febrero \11\UTC 2009

Escenario:

Por cambios en la organización, se requiere que las cuentas de correo de determinados usuarios pasen a ser cuentas de otro dominio de internet distinto al de las cuentas que tenían. Obviamente, durante un tiempo, ambas direcciones de correo, vieja y nueva, serán válidas, pero se quiere acabar suprimiendo la dirección vieja. Por ello se quiere poder enviar un correo, a cada remitente de los correos enviados a estos destinatarios, que avise del cambio de la cuenta de correo a la que se envió el correo y les solicite que actualicen su libreta de direcciones.

Para realizar este script, necesitaba dos cosas:

  • Un fichero con el log de correos recibidos, en el que existiera una columna con la dirección del remitente (por ejemplo suministrado por Barracuda)
  • Un fichero con las columnas de nombre, apellidos, dirección de correo vieja y dirección de correo nueva de los usuarios que reciben los correos

Ambos ficheros pueden ser tanto libros de Excel (2000/XP/2003 o 2007) como ficheros de texto de valores separados por comas (CSV) o por tabuladores (TAB). Usar estos formatos de ficheros nos permiten utilizar ADO para acceder a sus datos y realizar consultas SQL. Así podemos realizar una consulta de remitentes y destinatarios, en el fichero de log, usando la cláusula DISTINCT en la parte SELECT de la consulta, de manera que sólo se enviará un correo por cada pareja remitente-destinatario, independientemente de cuántos correos haya enviado un mismo remitente a un mismo destinatario; una vez se tiene esta consulta, se la recorre y se realiza otra en el fichero de usuario buscando en sus direcciones SMTP si está presente la dirección de destinatario del fichero log del registro en curso.

Una vez hecha esta introducción, pasemos al script.

Este script tiene por finalidad comunicar, a los remitentes de los correos recibidos por determinados usuarios, que la cuenta de correo a la que enviaron el correo se cambia por otra, para que así actualicen su libreta de direcciones. Para realizar esto, recibe un log, en un libro de Excel o un fichero de valores separados com comas (CSV) o tabuladores (TAB), de los correos recibidos y busca si los destinatarios están en la lista de correos que se actualizan, lista que está en otro libro de Excel o un fichero de valores separados com comas (CSV) o tabuladores (TAB). El script envía un sólo correo por cada pareja remitente-destinatario, no uno por cada correo recibido. Está pensado para obtener un listado de correo recibido al día y ser ejecutado una vez al día (al día o el período de tiempo que se estime conveniente)

Sintaxis

cscript [//nologo] disclaimer.vbs /FRemitentes:fichero /FDestinatarios:fichero /HTML:fichero /Usuario:nombre_usuario /Clave:contraseña_usuario /DireccionEnvio:remitente /Servidor:equipo [/CNombre:campo_nombre] [/CApellidos:campo_apellidos] [/CEmailViejo:campo_smtp] [/CEmailNuevo:campo_cuenta_nueva] [/CRemitente:campo_remitente] [/CDestinatario:campo_destinatario] [/Enombre:etiqueta_nombre] [/Eapellidos:etiqueta_apellidos] [/EEmailViejo:etiqueta_email_viejo] [/EEmailNuevo:etiqueta_email_nuevo] [/FImagen:fichero_imagen] [/Eimagen:etiqueta_imagen] [/TRemitentes:nombre_tabla] [/TDestinatarios:nombre_tabla] [/Log:fichero] [/Asunto:texto] [/?]

Siendo

Etiqueta Dato ¿Requerido? Descripción
CNombre campo_nombre No
Texto del encabezado de columna (es decir, nombre del campo), de la columna con el nombre del usuario en el libro de destinatarios, por ejemplo “No”. Si se omite se usará “Nombre”. En ADO, cuando se trata de ficheros, ya sean Excel, CSV o TAB, se considera como nombre de campo los datos de la primera línea del fichero
CApellidos campo_apellidos No
Texto del encabezado de columna (es decir, nombre del campo), de la columna con los apellidos del usuario en el libro de destinatarios, por ejemplo “Ap”. Si se omite se usará “Apellidos”. En ADO, cuando se trata de ficheros, ya sean Excel, CSV o TAB, se considera como nombre de campo los datos de la primera línea del fichero
CEmailViejo campo_smtp No
Texto del encabezado de columna (es decir, nombre del campo), de la columna con la lista de direcciones SMTP, separadas por punto y coma, del usuario en el libro de destinatarios, por ejemplo “Direcciones”. Si se omite se usará “smtp”. En ADO, cuando se trata de ficheros, ya sean Excel, CSV o TAB, se considera como nombre de campo los datos de la primera línea del fichero
CEmailNuevo campo_cuenta_nueva No
Texto del encabezado de columna (es decir, nombre del campo), de la columna con la nueva dirección de correo del usuario en el libro de destinatarios, por ejemplo “EmailN”. Si se omite se usará “nuevo”. En ADO, cuando se trata de ficheros, ya sean Excel, CSV o TAB, se considera como nombre de campo los datos de la primera línea del fichero
CRemitente campo_remitente No
Texto del encabezado de columna (es decir, nombre del campo), de la columna con la dirección de correo del remitente en el libro de remitentes por ejemplo “Desde”. Si se omite se usará “Desde”. En ADO, cuando se trata de ficheros, ya sean Excel, CSV o TAB, se considera como nombre de campo los datos de la primera línea del fichero
CDestinatario campo_destinatario No
Texto del encabezado de columna (es decir, nombre del campo), de la columna con la dirección de correo del destinatario en el libro de remitentes por ejemplo “Destinatario”. Si se omite, se usará “Para”. En ADO, cuando se trata de ficheros, ya sean Excel, CSV o TAB, se considera como nombre de campo los datos de la primera línea del fichero
Enombre etiqueta_nombre No
Nombre de la etiqueta, en el HTML de la plantilla, que debe ser sustituida por el nombre del usuario; por ejemplo “No”. En el HTML de la plantilla se deberá escribir como si fuera un comentario; siguiendo con el ejemplo “”. Si se omite se usará “Nombre”
Eapellidos etiqueta_apellidos No
Nombre de la etiqueta, en el HTML de la plantilla, que debe ser sustituida por los apellidos del usuario; por ejemplo “Ap”. En el HTML de la plantilla se deberá escribir como si fuera un comentario; siguiendo con el ejemplo ““. Si se omite, se usará “Apellidos”
EEmailViejo etiqueta_email_viejo No
Nombre de la etiqueta, en el HTML de la plantilla, que debe ser sustituida por la dirección de correo vieja del usuario; por ejemplo “emailn”. En el HTML de la plantilla se deberá escribir como si fuera un comentario, siguiendo con el ejemplo ““. Si se omite se usará “Viejo”
EEmailNuevo etiqueta_email_nuevo No
Nombre de la etiqueta, en el HTML de la plantilla, que debe ser sustituida por la dirección de correo nueva del usuario; por ejemplo “emailn”. En el HTML de la plantilla se deberá escribir como si fuera un comentario, siguiendo con el ejemplo ““. Si se omite se usará “nuevo”
FImagen fichero_imagen No
Ruta y nombre del fichero de imagen que se desea incrustar, por ejemplo como firma. Si se omite, no se incluirá ninguna imágen
Eimagen etiqueta_imagen No
Nombre de la etiqueta, en el HTML de la plantilla, que debe ser sustituida por la ruta y nombre del archivo de imagen a incrustar; por ejemplo “Img”. En el HTML de la plantilla se deberá escribir como si fuera un comentario; siguiendo con el ejemplo “”. Si se omite, y no se ha omitido /ImagenFirma, se usará “imagen”
FRemitentes fichero
Ruta y nombre del libro de Excel, o fichero de texto de valores separados por comas (csv) o tabuladores (tab), o carpeta en la que está el fichero de texto, en el que está el listado de correos recibidos y los destinatarios a los que se enviaba (listado que se obtiene, por ejemplo, de Barracuda). Debe tener como datos, al menos, los campos de remitente y destinatario. En caso de tratarse un fichero CSV o TAB, puede tratarse sólo de la ruta de la carpeta en la que está el fichero, en cuyo caso es requerido que se pase el argumento /TRemitentes con el nombre del fichero, si la ruta; si se pasa en /FRemitentes la ruta y el nombre del fichero, no es necesario pasar el argumento /TRemitentes, es más, en caso de pasarse será ignorado
FDestinatarios fichero
Ruta y nombre del libro Excel, o fichero de texto de valores separados por comas (csv) o tabuladores (tab), o carpeta en la que está el fichero de texto, con los usuarios que deben ser tenidos en cuenta en el proceso. Debe tener como datos, al menos, el nombre, los apellidos, la lista de direcciones de correo SMTP, separadas por puntos y comas, y la dirección de correo nueva. En caso de tratarse un fichero CSV o TAB, puede tratarse sólo de la ruta de la carpeta en la que está el fichero, en cuyo caso es requerido que se pase el argumento /TDestinatarios con el nombre del fichero, si la ruta; si se pasa en /FDestinatarios la ruta y el nombre del fichero, no es necesario pasar el argumento /TDestinatarios, es más, en caso de pasarse será ignorado
TRemitentes nombre_tabla No
Nombre de la hoja del libro de Excel, o del fichero de texto CSV o TAB, de remitentes en la que están los datos (por ejemplo “Remitentes” o “Remitentes.tab”). Si se omite, y el fichero de remitentes es un libro de Excel, se usará “Hoja1”; en el caso de que el fichero de remitentes sea de CSV o TAB, deberá ser pasado de forma obligatoria el nombre del fichero (sin ruta), a no ser que en el parámetro /FRemitentes se incluya el nombre y ruta del fichero
TDestinatarios nombre_tabla No
Nombre de la hoja del libro de Excel, o del fichero de texto CSV o TAB, de destinatarios en la que están los datos (por ejemplo “Usuarios” o “Usuarios.csv”). Si se omite, y el fichero de remitentes es un libro de Excel, se usará “Hoja1”; en el caso de que el fichero de remitentes sea de CSV o TAB, deberá ser pasado de forma obligatoria el nombre del fichero (sin ruta), a no ser que en el parámetro/FDestinatarios se incluya el nombre y ruta del fichero
HTML fichero
Ruta y nombre del fichero de texto con el código HTML del mensaje. Debe ser creado poniendo las etiquetas correspondientes a los campos de nombre, apellidos, dirección de correo vieja y dirección de correo nueva. Por ejemplo, el contenido de este fichero sería algo así:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" conten t="text/html;charset=iso-8859-1" />
    <title>Aviso de cambio de cuenta de correo</title>
    <style type="text/css">
      <!--
        body {
               font-family: Verdana, Arial, Helvetica, sans-serif;
               font-size: small;
               font-style: normal;
               line-height: normal;
               font-weight:normal;
               font-variant: normal;
               color: #000000;
               text-decoration: none;
               background-color: #FFFFCC
               text-align: justify;
             }
      -->
    </style>
  </head>
  <body>
    <p>
      Recientemente ha enviado uno o m&aacute;s correos a <!--nombre--> <!--apellidos-->, a la direcci&oacute;n de correo <!-
-viejo-->. Esta cuenta se cambia a <!--nuevo-->, por lo que le agradecer&iacute;amos que actualice este contacto en su libret
a de direcciones para que en lo sucesivo los correos enviados a <!--nombre--> <!--apellidos--> se env&iacute;en a la direcci&
oacute;n <!--nuevo--><br />  <br />
      Muchas gracias por su atención<br /><br />
      Atentamente:<br /><br />
      Sr. Vicente<br />
      Superintendente<br />
      T&eacute;cnicos de Investigaci&oacute;n Aeroterr&aacute;quea (TIA)
    </p>
    <p>
      <img src="<!--imagen-->" /><br />
    </p>
  </body>
</html>

Log fichero No
Ruta y nombre del fichero de valores separados por tabuladores en el que se reflejarán los resultados del envío; al nombre de fichero indicado se le pondrá como sufijo la fecha en formato YYYYMMDD-HHMM. Si se omite, se mostrarán por pantalla
Usuario nombre_usuario
Nombre del usuario que se conectará al servidor SMTP para realizar el envío de los correos
Clave contraseña_usuario
Contraseña del usuario que se conectará al servidor SMTP para realizar el envío de los correos
DireccionEnvio remitente
Remitente de los mensajes que se enviarán (aparece domo campo “De” en el correo)
Asunto texto No
Texto que aparece como asunto de los correos enviados. Si se omite el asunto será “Aviso del Administrador de Correo”
Servidor equipo
Nombre o IP del servidor SMTP que se utilizará para enviar el correo
?   No
Muestra la ayuda en línea.

Ejemplos:

– Se envía el aviso a los remitentes listados en \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los destinatarios listados en \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se muestran por pantalla. El código HTML del mensaje enviado está en el fichero \\tiaflsrv01\correo\comunicado-cambio.htm. Los correos se enviarán con el usuario TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente la dirección de correo “Superintendente Vicente “. Para el envío, se usará el servidor SMTP bacteriosrv.tia.org:

cscript //nologo disclaimer.vbs /FRemitentes:\\tiaflsrv01\correo\barracuda.xls /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm /Usuario:TIA\svicente /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente " /Servidor:bacteriosrv.tia.org

– Se envía el aviso a los remitentes listados en \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los destinatarios listados en \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se guardan en el fichero de valores separados por tabuladores \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje enviado está en el fichero \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen \\tiaflsrv01\correo\tia.jpg. Los correos se enviarán con el usuario TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente la dirección de correo “Superintendente Vicente “. Para el envío, se usará el servidor SMTP bacteriosrv.tia.org:

cscript //nologo disclaimer.vbs /FImagen:\\tiaflsrv01\correo\tia.jpg /FRemitentes:\\tiaflsrv01\correo\barracuda.xls /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente " /Servidor:bacteriosrv.tia.org

– Se envía el aviso a los remitentes listados en \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los destinatarios listados en \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se guardan en el fichero de valores separados por tabuladores \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje enviado está en el fichero \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen \\tiaflsrv01\correo\tia.jpg. Los nombres de los campos del fichero de Remitentes son Desde para el remitente y Destinatario para el destinatario. Los correos se enviarán con el usuario TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente la dirección de correo “Superintendente Vicente “. Para el envío, se usará el servidor SMTP bacteriosrv.tia.org:

cscript //nologo disclaimer.vbs /CRemitente:Desde /CDestinatario:Destinatario /FImagen:\\tiaflsrv01\correo\tia.jpg /FRemitentes:\\tiaflsrv01\correo\barracuda.xls /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente " /Servidor:bacteriosrv.tia.org

– Se envía el aviso a los remitentes listados en \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los destinatarios listados en \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se guardan en el fichero de valores separados por tabuladores \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje enviado está en el fichero \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen \\tiaflsrv01\correo\tia.jpg. Los nombres de los campos del fichero de Remitentes son Desde para el remitente y Destinatario para el destinatario.. Lon nombres de los campos del fichero de destinatario son No para el nombre, Ap para los apellidos, Direcciones para las direcciones SMTP y EmailN para la nueva dirección de correo. Los correos se enviarán con el usuario TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente la dirección de correo “Superintendente Vicente “. Para el envío, se usará el servidor SMTP bacteriosrv.tia.org:

cscript //nologo disclaimer.vbs /CNombre:No /CApellidos:Ap /CEmailViejo:Direcciones /CEmailNuevo:EmailN /CRemitente:Desde /CDestinatario:Destinatario /FImagen:\\tiaflsrv01\correo\tia.jpg /FRemitentes:\\tiaflsrv01\correo\barracuda.xls /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente " /Servidor:bacteriosrv.tia.org

– Se envía el aviso a los remitentes listados en \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los destinatarios listados en \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se guardan en el fichero de valores separados por tabuladores \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje enviado está en el fichero \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen \\tiaflsrv01\correo\tia.jpg. Los nombres de los campos del fichero de Remitentes son Desde para el remitente y Destinatario para el destinatario.. Lon nombres de los campos del fichero de destinatario son No para el nombre, Ap para los apellidos, Direcciones para las direcciones SMTP y EmailN para la nueva dirección de correo. En el fichero HTML, las etiquetas de los datos son {ENombre} para el nombre, {EApellidos} para los apellidos, Enuevo para la dirección de correo vieja y Eviejo para la dirección de correo nueva. Los correos se enviarán con el usuario TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente la dirección de correo “Superintendente Vicente “. El asunto de los mensajes será “Atencion: actualice su libreta de direcciones”. Para el envío, se usará el servidor SMTP bacteriosrv.tia.org:

cscript //nologo disclaimer.vbs /CNombre:No /CApellidos:Ap /CEmailViejo:Direcciones /CEmailNuevo:EmailN /CRemitente:Desde /CDestinatario:Destinatario /Enombre:No /Eapellidos:Ap /EEmailViejo:Enuevo /EEmailNuevo:Eviejo /FImagen:\\tiaflsrv01\correo\tia.jpg /FRemitentes:\\tiaflsrv01\correo\barracuda.xls /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente " /Asunto:"Atencion: actualice su libreta de direcciones" /Servidor:bacteriosrv.tia.org

Este es el código del script

'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* disclaimer.vbs                                                      *
'*                                                                     *
'* Este script tiene por finalidad comunicar, a los remitentes de los  *
'* correos recibidos por determinados usuarios, que la cuenta de       *
'* correo a la que enviaron el correo se cambia por otra, para que así *
'* actualicen su libreta de direcciones. Para realizar esto, recibe un *
'* log, en un libro de Excel, de los correos recibidos y busca si los  *
'* destinatarios están en la lista de correos que se actualizan, lista *
'* que está en otro libro de Excel. El script envía un sólo correo por *
'* cada pareja remitente-destinatario, no uno por cada correo          *
'* recibido. Está pensado para obtener un listado de correo recibido   *
'* al día y ser ejecutado una vez al día (al día o el período de       *
'* tiempo que se estime conveniente)                                   *
'*                                                                     *
'* Sintaxis                                                            *
'*                                                                     *
'* cscript [//nologo] disclaimer.vbs /FRemitentes:fichero              *
'* /FDestinatarios:fichero /HTML:fichero /Usuario:nombre_usuario       *
'* /Clave:contraseña_usuario /DireccionEnvio:remitente                 *
'* /Servidor:equipo [/CNombre:campo_nombre]                            *
'* [/CApellidos:campo_apellidos] [/CEmailViejo:campo_smtp]             *
'* [/CEmailNuevo:campo_cuenta_nueva] [/CRemitente:campo_remitente]     *
'* [/CDestinatario:campo_destinatario] [/Enombre:etiqueta_nombre]      *
'* [/Eapellidos:etiqueta_apellidos]                                    *
'* [/EEmailViejo:etiqueta_email_viejo]                                 *
'* [/EEmailNuevo:etiqueta_email_nuevo] [/FImagen:fichero_imagen]       *
'* [/Eimagen:etiqueta_imagen] [/TRemitentes:nombre_tabla]              *
'* [/TDestinatarios:nombre_tabla] [/Log:fichero] [/Asunto:texto] [/?]  *
'*                                                                     *
'* Siendo                                                              *
'*                                                                     *
'* - /CNombre: campo_nombre (Opcional):                                *
'*         Texto del encabezado de columna (es decir, nombre del       *
'*         campo), de la columna con el nombre del usuario en el libro *
'*         de destinatarios, por ejemplo "No". Si se omite se usará    *
'*         "Nombre". En ADO, cuando se trata de ficheros, ya sean      *
'*         Excel, CSV o TAB, se considera como nombre de campo los     *
'*         datos de la primera línea del fichero                       *
'*                                                                     *
'* - /CApellidos: campo_apellidos (Opcional):                          *
'*         Texto del encabezado de columna (es decir, nombre del       *
'*         campo), de la columna con los apellidos del usuario en el   *
'*         libro de destinatarios, por ejemplo "Ap". Si se omite se    *
'*         usará "Apellidos". En ADO, cuando se trata de ficheros, ya  *
'*         sean Excel, CSV o TAB, se considera como nombre de campo    *
'*         los datos de la primera línea del fichero                   *
'*                                                                     *
'* - /CEmailViejo: campo_smtp (Opcional):                              *
'*         Texto del encabezado de columna (es decir, nombre del       *
'*         campo), de la columna con la lista de direcciones SMTP,     *
'*         separadas por punto y coma, del usuario en el libro de      *
'*         destinatarios, por ejemplo "Direcciones". Si se omite se    *
'*         usará "smtp". En ADO, cuando se trata de ficheros, ya sean  *
'*         Excel, CSV o TAB, se considera como nombre de campo los     *
'*         datos de la primera línea del fichero                       *
'*                                                                     *
'* - /CEmailNuevo: campo_cuenta_nueva (Opcional):                      *
'*         Texto del encabezado de columna (es decir, nombre del       *
'*         campo), de la columna con la nueva dirección de correo del  *
'*         usuario en el libro de destinatarios, por ejemplo "EmailN". *
'*         Si se omite se usará "nuevo". En ADO, cuando se trata de    *
'*         ficheros, ya sean Excel, CSV o TAB, se considera como       *
'*         nombre de campo los datos de la primera línea del fichero   *
'*                                                                     *
'* - /CRemitente: campo_remitente (Opcional):                          *
'*         Texto del encabezado de columna (es decir, nombre del       *
'*         campo), de la columna con la dirección de correo del        *
'*         remitente en el libro de remitentes por ejemplo "Desde". Si *
'*         se omite se usará "Desde". En ADO, cuando se trata de       *
'*         ficheros, ya sean Excel, CSV o TAB, se considera como       *
'*         nombre de campo los datos de la primera línea del fichero   *
'*                                                                     *
'* - /CDestinatario: campo_destinatario (Opcional):                    *
'*         Texto del encabezado de columna (es decir, nombre del       *
'*         campo), de la columna con la dirección de correo del        *
'*         destinatario en el libro de remitentes por ejemplo          *
'*         "Destinatario". Si se omite, se usará "Para". En ADO,       *
'*         cuando se trata de ficheros, ya sean Excel, CSV o TAB, se   *
'*         considera como nombre de campo los datos de la primera      *
'*         línea del fichero                                           *
'*                                                                     *
'* - /Enombre: etiqueta_nombre (Opcional):                             *
'*         Nombre de la etiqueta, en el HTML de la plantilla, que debe *
'*         ser sustituida por el nombre del usuario; por ejemplo "No". *
'*         En el HTML de la plantilla se deberá escribir como si fuera *
'*         un comentario; siguiendo con el ejemplo "<!-No-->". Si se   *
'*         omite se usará "Nombre"                                     *
'*                                                                     *
'* - /Eapellidos: etiqueta_apellidos (Opcional):                       *
'*         Nombre de la etiqueta, en el HTML de la plantilla, que debe *
'*         ser sustituida por los apellidos del usuario; por ejemplo   *
'*         "Ap". En el HTML de la plantilla se deberá escribir como si *
'*         fuera un comentario; siguiendo con el ejemplo "<!--Ap-->".  *
'*         Si se omite, se usará "Apellidos"                           *
'*                                                                     *
'* - /EEmailViejo: etiqueta_email_viejo (Opcional):                    *
'*         Nombre de la etiqueta, en el HTML de la plantilla, que debe *
'*         ser sustituida por la dirección de correo vieja del         *
'*         usuario; por ejemplo "emailn". En el HTML de la plantilla   *
'*         se deberá escribir como si fuera un comentario, siguiendo   *
'*         con el ejemplo "<!--emailn-->". Si se omite se usará "Viejo"*
'*                                                                     *
'* - /EEmailNuevo: etiqueta_email_nuevo (Opcional):                    *
'*         Nombre de la etiqueta, en el HTML de la plantilla, que debe *
'*         ser sustituida por la dirección de correo nueva del         *
'*         usuario; por ejemplo "emailn". En el HTML de la plantilla   *
'*         se deberá escribir como si fuera un comentario, siguiendo   *
'*         con el ejemplo "<!--emailn-->". Si se omite se usará "nuevo"*
'*                                                                     *
'* - /FImagen: fichero_imagen (Opcional):                              *
'*         Ruta y nombre del fichero de imagen que se desea incrustar, *
'*         por ejemplo como firma. Si se omite, no se incluirá ninguna *
'*         imágen                                                      *
'*                                                                     *
'* - /Eimagen: etiqueta_imagen (Opcional):                             *
'*         Nombre de la etiqueta, en el HTML de la plantilla, que debe *
'*         ser sustituida por la ruta y nombre del archivo de imagen a *
'*         incrustar; por ejemplo "Img". En el HTML de la plantilla se *
'*         deberá escribir como si fuera un comentario; siguiendo con  *
'*         el ejemplo "<!-Img-->". Si se omite, y no se ha omitido     *
'*         /ImagenFirma, se usará "imagen"                             *
'*                                                                     *
'* - /FRemitentes: fichero (Requerido):                                *
'*         Ruta y nombre del libro de Excel, o fichero de texto de     *
'*         valores separados por comas (csv) o tabuladores (tab), o    *
'*         carpeta en la que está el fichero de texto, en el que está  *
'*         el listado de correos recibidos y los destinatarios a los   *
'*         que se enviaba (listado que se obtiene, por ejemplo, de     *
'*         Barracuda). Debe tener como datos, al menos, los campos de  *
'*         remitente y destinatario. En caso de tratarse un  fichero   *
'*         CSV o TAB, puede tratarse sólo de la ruta de la carpeta en  *
'*         la que está el fichero, en cuyo caso es requerido que se    *
'*         pase el argumento /TRemitentes con el nombre del fichero,   *
'*         si la ruta; si se pasa en /FRemitentes la ruta y el nombre  *
'*         del fichero, no es necesario pasar el argumento             *
'*         /TRemitentes, es más, en caso de pasarse será ignorado      *
'*                                                                     *
'* - /FDestinatarios: fichero (Requerido):                             *
'*         Ruta y nombre del libro Excel, o fichero de texto de        *
'*         valores separados por comas (csv) o tabuladores (tab), o    *
'*         carpeta en la que está el fichero de texto, con los         *
'*         usuarios que deben ser tenidos en cuenta en el proceso.     *
'*         Debe tener como datos, al menos, el nombre, los apellidos,  *
'*         la lista de direcciones de correo SMTP, separadas por       *
'*         puntos y comas, y la dirección de correo nueva. En caso de  *
'*         tratarse un  fichero CSV o TAB, puede tratarse sólo de la   *
'*         ruta de la carpeta en la que está el fichero, en cuyo caso  *
'*         es requerido que se pase el argumento /TDestinatarios con   *
'*         el nombre del fichero, si la ruta; si se pasa en            *
'*         /FDestinatarios la ruta y el nombre del fichero, no es      *
'*         necesario pasar el argumento /TDestinatarios, es más, en    *
'*         caso de pasarse será ignorado                               *
'*                                                                     *
'* - /TRemitentes: nombre_tabla (Opcional):                            *
'*         Nombre de la hoja del libro de Excel, o del fichero de      *
'*         texto CSV o TAB,  de remitentes en la que están los datos   *
'*         (por ejemplo "Remitentes" o "Remitentes.tab"). Si se omite, *
'*         y el fichero de remitentes es un libro de Excel, se usará   *
'*         "Hoja1"; en el caso de que el fichero de remitentes sea de  *
'*         CSV o TAB, deberá ser pasado de forma obligatoria el nombre *
'*         del fichero (sin ruta), a no ser que en el parámetro        *
'*         /FRemitentes se incluya el nombre y ruta del fichero        *
'*                                                                     *
'* - /TDestinatarios: nombre_tabla (Opcional):                         *
'*         Nombre de la hoja del libro de Excel, o del fichero de      *
'*         texto CSV o TAB, de destinatarios en la que están los datos *
'*         (por ejemplo "Usuarios" o "Usuarios.csv"). Si se omite, y   *
'*         el fichero de remitentes es un libro de Excel, se usará     *
'*         "Hoja1"; en el caso de que el fichero de remitentes sea de  *
'*         CSV o TAB, deberá ser pasado de forma obligatoria el nombre *
'*         del fichero (sin ruta), a no ser que en el                  *
'*         parámetro/FDestinatarios se incluya el nombre y ruta del    *
'*         fichero                                                     *
'*                                                                     *
'* - /HTML: fichero (Requerido):                                       *
'*         Ruta y nombre del fichero de texto con el código HTML del   *
'*         mensaje. Debe ser creado poniendo las etiquetas             *
'*         correspondientes a los campos de nombre, apellidos,         *
'*         dirección de correo vieja y dirección de correo nueva. Por  *
'*         ejemplo, el contenido de este fichero sería algo            *
'*         así:                                                        *
'*         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0                *
'*                   Transitional//EN"                                 *
'*         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  *
'*         <html xmlns="http://www.w3.org/1999/xhtml">                 *
'*           <head>                                                    *
'*             <meta http-equiv="Content-Type"                         *
'*                   content="text/html; charset=iso-8859-1" />        *
'*             <title>Aviso de cambio de cuenta de correo</title>      *
'*             <style type="text/css">                                 *
'*             <!--                                                    *
'*               body { font-family: Verdana, Arial,                   *
'*                      Helvetica, sans-serif;                         *
'*                      font-size: small;                              *
'*                      font-style: normal;                            *
'*                      line-height: normal;                           *
'*                      font-weight: normal;                           *
'*                      font-variant: normal;                          *
'*                      color: #000000;                                *
'*                      text-decoration: none;                         *
'*                      background-color: #FFFFCC;                     *
'*                      text-align: justify;                           *
'*                    }                                                *
'*             -->                                                     *
'*           </style>                                                  *
'*         </head>                                                     *
'*         <body>                                                      *
'*           <p>                                                       *
'*               Recientemente ha enviado uno o m&aacute;s correos a   *
'*               <!--nombre--> <!--apellidos-->, a la direcci&oacute;n *
'*               de correo <!--viejo-->. Esta cuenta se cambia a       *
'*               <!--nuevo-->, por lo que le agradecer&iacute;amos que *
'*               actualice este contacto en su libreta de direcciones  *
'*               para que en lo sucesivo los correos enviados a        *
'*               <!--nombre--> <!--apellidos--> se env&iacute;en a la  *
'*               direcci&oacute;n <!--nuevo--><br /><br />             *
'*               Muchas gracias por su atención<br /><br />            *
'*               Atentamente:<br /><br />                              *
'*               Sr. Vicente                                           *
'*               Superintendente<br />                                 *
'*               T&eacute;cnicos de Investigaci&oacute;n               *
'*               Aeroterr&aacute;quea (TIA)                            *
'*             </p>                                                    *
'*             <p><img src="<!--imagen-->" /><br />                    *
'*             </p>                                                    *
'*           </body>                                                   *
'*         </html>                                                     *
'*                                                                     *
'* - /Log: fichero (Opcional):                                         *
'*         Ruta y nombre del fichero de valores separados por          *
'*         tabuladores en el que se reflejarán los resultados del      *
'*         envío; al nombre de fichero indicado se le pondrá como      *
'*         sufijo la fecha en formato YYYYMMDD-HHMM. Si se omite, se   *
'*         mostrarán por pantalla                                      *
'*                                                                     *
'* - /Usuario: nombre_usuario (Requerido):                             *
'*         Nombre del usuario que se conectará al servidor SMTP para   *
'*         realizar el envío de los correos                            *
'*                                                                     *
'* - /Clave: contraseña_usuario (Requerido):                           *
'*         Contraseña del usuario que se conectará al servidor SMTP    *
'*         para realizar el envío de los correos                       *
'*                                                                     *
'* - /DireccionEnvio: remitente (Requerido):                           *
'*         Remitente de los mensajes que se enviarán (aparece domo     *
'*         campo "De" en el correo)                                    *
'*                                                                     *
'* - /Asunto: texto (Opcional):                                        *
'*         Texto que aparece como asunto de los correos enviados. Si   *
'*         se omite el asunto será "Aviso del Administrador de Correo" *
'*                                                                     *
'* - /Servidor: equipo (Requerido):                                    *
'*         Nombre o IP del servidor SMTP que se utilizará para enviar  *
'*         el correo                                                   *
'*                                                                     *
'* - /?: ayuda (Opcional):                                             *
'*         Muestra la ayuda en línea                                   *
'*                                                                     *
'*                                                                     *
'* Ejemplos:                                                           *
'*                                                                     *
'* - Se envía el aviso a los remitentes listados en                    *
'* \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los       *
'* destinatarios listados en                                           *
'* \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se       *
'* muestran por pantalla. El código HTML del mensaje enviado está en   *
'* el fichero \\tiaflsrv01\correo\comunicado-cambio.htm. Los correos   *
'* se enviarán con el usuario TIA\svicente con contraseña OfeliaFoca,  *
'* apareciendo como remitente la dirección de correo "Superintendente  *
'* Vicente <svicente@tia.org>". Para el envío, se usará el servidor    *
'* SMTP bacteriosrv.tia.org:                                           *
'*                                                                     *
'* cscript //nologo disclaimer.vbs                                     *
'* /FRemitentes:\\tiaflsrv01\correo\barracuda.xls                      *
'* /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx          *
'* /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm                     *
'* /Usuario:TIA\svicente /Clave:OfeliaFoca                             *
'* /DireccionEnvio:"Superintendente Vicente <svicente@tia.org>"        *
'* /Servidor:bacteriosrv.tia.org                                       *
'*                                                                     *
'* - Se envía el aviso a los remitentes listados en                    *
'* \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los       *
'* destinatarios listados en                                           *
'* \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se       *
'* guardan en el fichero de valores separados por tabuladores          *
'* \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje      *
'* enviado está en el fichero                                          *
'* \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen   *
'* \\tiaflsrv01\correo\tia.jpg. Los correos se enviarán con el usuario *
'* TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente  *
'* la dirección de correo "Superintendente Vicente                     *
'* <svicente@tia.org>". Para el envío, se usará el servidor SMTP       *
'* bacteriosrv.tia.org:                                                *
'*                                                                     *
'* cscript //nologo disclaimer.vbs                                     *
'* /FImagen:\\tiaflsrv01\correo\tia.jpg                                *
'* /FRemitentes:\\tiaflsrv01\correo\barracuda.xls                      *
'* /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx          *
'* /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm                     *
'* /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente       *
'* /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente          *
'* <svicente@tia.org>" /Servidor:bacteriosrv.tia.org                   *
'*                                                                     *
'* - Se envía el aviso a los remitentes listados en                    *
'* \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los       *
'* destinatarios listados en                                           *
'* \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se       *
'* guardan en el fichero de valores separados por tabuladores          *
'* \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje      *
'* enviado está en el fichero                                          *
'* \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen   *
'* \\tiaflsrv01\correo\tia.jpg. Los nombres de los campos del fichero  *
'* de Remitentes son Desde para el remitente y Destinatario para el    *
'* destinatario. Los correos se enviarán con el usuario TIA\svicente   *
'* con contraseña OfeliaFoca, apareciendo como remitente la dirección  *
'* de correo "Superintendente Vicente <svicente@tia.org>". Para el     *
'* envío, se usará el servidor SMTP bacteriosrv.tia.org:               *
'*                                                                     *
'* cscript //nologo disclaimer.vbs /CRemitente:Desde                   *
'* /CDestinatario:Destinatario /FImagen:\\tiaflsrv01\correo\tia.jpg    *
'* /FRemitentes:\\tiaflsrv01\correo\barracuda.xls                      *
'* /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx          *
'* /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm                     *
'* /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente       *
'* /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente          *
'* <svicente@tia.org>" /Servidor:bacteriosrv.tia.org                   *
'*                                                                     *
'* - Se envía el aviso a los remitentes listados en                    *
'* \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los       *
'* destinatarios listados en                                           *
'* \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se       *
'* guardan en el fichero de valores separados por tabuladores          *
'* \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje      *
'* enviado está en el fichero                                          *
'* \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen   *
'* \\tiaflsrv01\correo\tia.jpg. Los nombres de los campos del fichero  *
'* de Remitentes son Desde para el remitente y Destinatario para el    *
'* destinatario.. Lon nombres de los campos del fichero de             *
'* destinatario son No para el nombre, Ap para los apellidos,          *
'* Direcciones para las direcciones SMTP y EmailN para la nueva        *
'* dirección de correo. Los correos se enviarán con el usuario         *
'* TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente  *
'* la dirección de correo "Superintendente Vicente                     *
'* <svicente@tia.org>". Para el envío, se usará el servidor SMTP       *
'* bacteriosrv.tia.org:                                                *
'*                                                                     *
'* cscript //nologo disclaimer.vbs /CNombre:No /CApellidos:Ap          *
'* /CEmailViejo:Direcciones /CEmailNuevo:EmailN /CRemitente:Desde      *
'* /CDestinatario:Destinatario /FImagen:\\tiaflsrv01\correo\tia.jpg    *
'* /FRemitentes:\\tiaflsrv01\correo\barracuda.xls                      *
'* /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx          *
'* /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm                     *
'* /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente       *
'* /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente          *
'* <svicente@tia.org>" /Servidor:bacteriosrv.tia.org                   *
'*                                                                     *
'* - Se envía el aviso a los remitentes listados en                    *
'* \\tiaflsrv01\correo\barracuda.xls que dirija un correos a los       *
'* destinatarios listados en                                           *
'* \\tiaflsrv01\correo\cuentas-cambiadas.xlsx. Los resultados se       *
'* guardan en el fichero de valores separados por tabuladores          *
'* \\tiaflsrv01\correo\comunicado.csv. El código HTML del mensaje      *
'* enviado está en el fichero                                          *
'* \\tiaflsrv01\correo\comunicado-cambio.htm y se incluirá la imagen   *
'* \\tiaflsrv01\correo\tia.jpg. Los nombres de los campos del fichero  *
'* de Remitentes son Desde para el remitente y Destinatario para el    *
'* destinatario.. Lon nombres de los campos del fichero de             *
'* destinatario son No para el nombre, Ap para los apellidos,          *
'* Direcciones para las direcciones SMTP y EmailN para la nueva        *
'* dirección de correo. En el fichero HTML, las etiquetas de los datos *
'* son {ENombre} para el nombre, {EApellidos} para los apellidos,      *
'* Enuevo para la dirección de correo vieja y Eviejo para la dirección *
'* de correo nueva. Los correos se enviarán con el usuario             *
'* TIA\svicente con contraseña OfeliaFoca, apareciendo como remitente  *
'* la dirección de correo "Superintendente Vicente                     *
'* <svicente@tia.org>". El asunto de los mensajes será "Atencion:      *
'* actualice su libreta de direcciones". Para el envío, se usará el    *
'* servidor SMTP bacteriosrv.tia.org:                                  *
'*                                                                     *
'* cscript //nologo disclaimer.vbs /CNombre:No /CApellidos:Ap          *
'* /CEmailViejo:Direcciones /CEmailNuevo:EmailN /CRemitente:Desde      *
'* /CDestinatario:Destinatario /Enombre:No /Eapellidos:Ap              *
'* /EEmailViejo:Enuevo /EEmailNuevo:Eviejo                             *
'* /FImagen:\\tiaflsrv01\correo\tia.jpg                                *
'* /FRemitentes:\\tiaflsrv01\correo\barracuda.xls                      *
'* /FDestinatarios:\\tiaflsrv01\correo\cuentas-cambiadas.xlsx          *
'* /HTML:\\tiaflsrv01\correo\comunicado-cambio.htm                     *
'* /Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:TIA\svicente       *
'* /Clave:OfeliaFoca /DireccionEnvio:"Superintendente Vicente          *
'* <svicente@tia.org>" /Asunto:"Atencion: actualice su libreta de      *
'* direcciones" /Servidor:bacteriosrv.tia.org                          *
'*                                                                     *
'*                                                                     *
'*                                                                     *
'*                                                                     *
'* © Fernando Reyes                                                    *
'* Febrero De 2009                                                     *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

'Exigimos la declaración de variables
Option Explicit

Dim str_Error            'As String
Dim int_Error            'As String
Dim fl_Nombre            'As String
Dim fl_Apellidos         'As String
Dim fl_SMTP              'As String
Dim fl_EmailNuevo        'As String
Dim fl_De                'As String
Dim fl_Para              'As String
Dim lbl_Nombre           'As String
Dim lbl_Apellidos        'As String
Dim lbl_EmailViejo       'As String
Dim lbl_EmailNuevo       'As String
Dim db_Remitentes        'As String
Dim db_Destinatarios     'As String
Dim tbl_Remitentes       'As String
Dim tbl_Destinatarios    'As String
Dim str_HTML             'As String
Dim str_IMG              'As String
Dim str_Log              'As String
Dim str_Salida           'As String
Dim str_Usuario          'As String
Dim str_Clave            'As String
Dim str_Remitente        'As String
Dim str_Asunto           'As String
Dim str_Desde            'As String
Dim str_Para             'As String
Dim str_Nombre           'As String
Dim str_Apellidos        'As String
Dim str_Nuevo            'As String
Dim str_SMTPsvr          'As String
Dim lbl_IMG              'As String
Dim bol_RemitentesTXT    'As Boolean
Dim bol_DestinatariosTXT 'As Boolean

Dim obj_FS               'As Scripting.FileSystemObject
Dim obj_TS               'As Scripting.TextStream

Dim con_Remitentes       'As ADODB.Connection
Dim rs_Remitentes        'As ADODB.Recordset
Dim str_Remitentes       'As String
Dim con_Destinatarios    'As ADODB.Connection
Dim rs_Destinatarios     'As ADODB.Recordset
Dim str_Destinatarios    'As String
Dim str_ConRemitentes    'As String
Dim str_ConDestinatarios 'As String


'Validando los argumentos y almacenando
'sus valores
If f_RevisarArgumentos( _
                       str_Error, _
                       int_Error) Then

    Call s_Ayuda(str_Error)
    WScript.Quit int_Error

End If

'Creamos las conexiones ADO a los ficheros de remitentes y de destinatarios
Set con_Remitentes = f_ConectarFichero(str_ConRemitentes)
Set con_Destinatarios = f_ConectarFichero(str_ConDestinatarios)

'Montamos la consulta de remitentes. Como se puede producir
'que haya remitentes que no cumplan con las reglas de dirección
'de email válida (que haya una arroba y al menos un punto posterior
'a la arroba, ponemos la condición LIKE. Además, sólo nos interesa
'una ocurrencia por remitente y destinatario, de ahí el DISTINCT
str_Remitentes = _
            "SELECT DISTINCT " & vbCrLf & _
            "       " & fl_De & ", " & vbCrLf & _
            "       " & fl_Para & " " & vbCrLf & _
            "FROM " & vbCrLf & _
            "       " & tbl_Remitentes & vbCrLf & _
            "WHERE " & vbCrLf & _
            "      " & fl_De & " LIKE '%@%.%'"
'WScript.Echo str_Remitentes            
'Obtenemos la consulta
Set rs_Remitentes = f_RecordsetADO(con_Remitentes,"",str_Remitentes)

'Si la consulta está vacía
If rs_Remitentes.EOF Then

    'Mostramos un mensaje
    WScript.Echo "No hay mensajes que enviar"
    
    'Cerramos conexiones y vaciamos objetos
    Set rs_Remitentes = Nothing
    con_Remitentes.close
    con_Destinatarios.close
    Set con_Remitentes = Nothing
    Set con_Destinatarios = Nothing
    
    'Finalizamos el script sin error
    WScript.Quit 0
    
End If

'Ponemos los encabezados a la salida
str_Salida = "De" & vbTab & _
             "Remitente" & vbTab & _
             "Nombre" & vbTab & _
             "Apellidos" & vbTab & _
             "Correo-Viejo" & vbTab & _
             "Correo-Nuevo" & vbTab & _
             "Resultado" & vbTab & _
             "Información"

'Si hay que volcar la información en el fichero
'de salida de ruta y nombre str_Log
If Len(str_Log) > 0 Then

    'Creamos un objeto FileSystemObject
    Set obj_FS = CreateObject("Scripting.FileSystemObject")

    'Creamos el fichero de salida
    Set obj_TS = obj_FS.CreateTextFile(str_Log,True)

    'Volcamos la información de salida en el fichero
    obj_TS.WriteLine str_Salida

Else

    'Mostramos los encabezados por pantalla
    WScript.Echo str_Salida
    
    'Los subrayamos
    WScript.Echo "==" & vbTab & _
                 "=========" & vbTab & _
                 "======" & vbTab & _
                 "=========" & vbTab & _
                 "============" & vbTab & _
                 "============" & vbTab & _
                 "=========" & vbTab & _
                 "==========="

End If
'Recorremos el recordset de remitentes
While Not rs_Remitentes.EOF

    'Vaciamos la variable de salida
    str_Salida = ""

    'Montamos la consulta de destinatarios. Usamos LIKE para buscar
    'en la lista de posibles direcciones SMPT del destinatario
    str_Destinatarios = "SELECT " & vbCrLf & _
                        "       * " & vbCrLf & _
                        "FROM " & vbCrLf & _
                        "       " & tbl_Destinatarios & vbCrLf & _
                        "WHERE " & vbCrLf & _
                        "       " & fl_SMTP & " LIKE ""%" & _
                            rs_Remitentes.Fields(fl_Para).Value & "%"""
                            
    'Obtenemos la consulta
    Set rs_Destinatarios = f_RecordsetADO(con_Destinatarios,"",str_Destinatarios)
    
    'Si no esta vacía la consulta
    If Not rs_Destinatarios.EOF Then
    
        'Obtenemos los datos del remitente
        str_Desde = "" & rs_Remitentes.Fields(fl_De).Value
        str_Para = "" & rs_Remitentes.Fields(fl_Para).Value
        str_Nombre = "" & rs_Destinatarios.Fields(fl_Nombre).Value
        str_Apellidos = "" & rs_Destinatarios.Fields(fl_Apellidos).Value
        str_Nuevo = "" & rs_Destinatarios.Fields(fl_EmailNuevo).Value
        
        'Mandamos el correo, recogiendo el resultado del envío
        'en la variable de salida
        str_Salida = f_EnviarCorreo(str_Desde, _
                                    str_Nombre, _
                                    str_Apellidos, _
                                    str_Para, _
                                    str_Nuevo)

        'Si hay que volcar la información en el fichero
        'de salida de ruta y nombre str_Log
        If Len(str_Log) > 0 Then

            'Volcamos la información de salida en el fichero
            obj_TS.WriteLine str_Salida

        Else

            'Mostramos los encabezados por pantalla
            WScript.Echo str_Salida
    
        End If
        
        'Cerramos el recordset de destinatarios
        rs_Destinatarios.Close
    
    End If
    
    'Vaciamos el recordset de destinatarios
    Set rs_Destinatarios = Nothing
    
    'Vamos al próximo registro
    rs_Remitentes.MoveNext

Wend

'Cerramos el recordset de remitentes
rs_Remitentes.Close

'Vaciamos el recordset de remitentes
Set rs_Remitentes = Nothing

'Cerramos conexiones
con_Remitentes.Close
con_Destinatarios.Close

'Vaciamos conexiones
Set con_Remitentes = Nothing
Set con_Destinatarios = Nothing

'Si hay que volcar información en el fichero
'de salida de ruta y nombre str_Log
If Len(str_Log) > 0 Then

    'Cerramos el fichero de salida
    obj_TS.Close
    
    'Lo renombramos
    obj_FS.MoveFile str_Log, f_NombreLog(str_Log)

    'Limpieza de popa :-)
    Set obj_TS = Nothing
    Set obj_FS = Nothing

End If

Function f_RevisarArgumentos( _
                             str_Error, _
                             int_Error _
                             ) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos                                  *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 05/02/2009 13:01:45                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función revisa los argumentos recibidos,        *
'*                recogiendo los posibles fallos por falta de          *
'*                argumentos requeridos y almacenando en las           *
'*                variables correspondientes los argumentos            *
'*                recibidos. recibe dos parámetros cuyo fin es ser de  *
'*                salida: una cadena que almacenará los errores        *
'*                detectados y un entero que almacenará el código de   *
'*                los errores detectados. Hay tres tipos de error;     *
'*                error 1 para los argumentos sin nombre requeridos y  *
'*                no encontrados, error 2 para los argumentos con      *
'*                nombre requeridos y no encontrados, por último,      *
'*                error 4 para los combos de argumentos opcionales     *
'*                (un combo de argumentos opcionales es aquel          *
'*                conjunto de argumentos opcionales que es requerido   *
'*                que se pase al menos uno de ellos y que si se pasa   *
'*                más de uno se ignorarán aquellos que estén detrás    *
'*                en la prioridad entre ellos; una característica      *
'*                clara de lo que es un combo de argumentos es cuando  *
'*                dos omás argumentos almacenan su valor en la misma   *
'*                variable). En el caso de producirse más de un tipo   *
'*                de error, el número de error será la suma de ambos   *
'*                de los errores recibidos, es decir 3, 5 o 6          *
'***********************************************************************

    Dim bol_Devolucion 'As Boolean
    Dim bol_Error1 'As Boolean
    Dim bol_Error2 'As Boolean
    Dim bol_Error4 'As Boolean
    Dim obj_FS 'As Scripting.FileSystemObject
    Dim obj_TS 'As Scripting.TextStream

    'Iniciamos los indicadores
    bol_Devolucion = False
    bol_Error1 = False
    bol_Error2 = False
    bol_Error4 = False


    'Si hay que mostrar la ayuda, se muestra y
    'termina el script
    If WScript.Arguments.Named.Exists("?") Then

        Call s_Ayuda("******************" & vbCrLf & _
                     "*     AYUDA      *" & vbCrLf & _
                     "******************")

        WScript.Quit 0

    End If

    'Revisamos que esté el argumento
    '/CNombre (campo_nombre)
    If WScript.Arguments.Named.Exists("CNombre") Then

        fl_Nombre =  _
               WScript.Arguments.Named("CNombre")
               
    Else
    
        fl_Nombre = "Nombre"

    End If

    'Revisamos que esté el argumento
    '/CApellidos (campo_apellidos)
    If WScript.Arguments.Named.Exists("CApellidos") Then

        fl_Apellidos =  _
               WScript.Arguments.Named("CApellidos")
               
    Else
    
        fl_Apellidos = "Apellidos"

    End If

    'Revisamos que esté el argumento
    '/CEmailViejo (campo_smtp)
    If WScript.Arguments.Named.Exists("CEmailViejo") Then

        fl_SMTP =  _
               WScript.Arguments.Named("CEmailViejo")
               
    Else
    
        fl_SMTP = "smtp"

    End If

    'Revisamos que esté el argumento
    '/CEmailNuevo (campo_cuenta_nueva)
    If WScript.Arguments.Named.Exists("CEmailNuevo") Then

        fl_EmailNuevo =  _
               WScript.Arguments.Named("CEmailNuevo")
               
    Else
    
        fl_EmailNuevo = "emailnuevo"

    End If

    'Revisamos que esté el argumento
    '/CRemitente (campo_remitente)
    If WScript.Arguments.Named.Exists("CRemitente") Then

        fl_De =  _
               WScript.Arguments.Named("CRemitente")
               
    Else
    
        fl_De = "Desde"

    End If

    'Revisamos que esté el argumento
    '/CDestinatario (campo_destinatario)
    If WScript.Arguments.Named.Exists("CDestinatario") Then

        fl_Para =  _
               WScript.Arguments.Named("CDestinatario")
               
    Else
    
        fl_Para = "Para"

    End If

    'Revisamos que esté el argumento
    '/ENombre (etiqueta_nombre)
    If WScript.Arguments.Named.Exists("ENombre") Then

        lbl_Nombre =  _
               "<!--" & _
               WScript.Arguments.Named("ENombre") & _
               "-->"
               
    Else
    
        lbl_Nombre = "<!--nombre-->"

    End If

    'Revisamos que esté el argumento
    '/EApellidos (etiqueta_apellidos)
    If WScript.Arguments.Named.Exists("EApellidos") Then

        lbl_Apellidos =  _
               "<!--" & _
               WScript.Arguments.Named("EApellidos") & _
               "-->"
               
    Else
    
        lbl_Apellidos = "<!--apellidos-->"

    End If

    'Revisamos que esté el argumento
    '/EEmailViejo (etiqueta_email_viejo)
    If WScript.Arguments.Named.Exists("EmailViejoE") Then

        lbl_EmailViejo =  _
               "<!--" & _
               WScript.Arguments.Named("EEmailViejo") & _
               "-->"
               
    Else
    
        lbl_EmailViejo = "<!--viejo-->"

    End If

    'Revisamos que esté el argumento
    '/EEmailNuevo (etiqueta_email_nuevo)
    If WScript.Arguments.Named.Exists("EEmailNuevo") Then

        lbl_EmailNuevo =  _
               "<!--" & _
               WScript.Arguments.Named("EEmailNuevo") & _
               "-->"
               
    Else
    
        lbl_EmailNuevo = "<!--nuevo-->"

    End If

    
    'Revisamos los parámetros de datos de remitentes
    Call s_ControlLibros(WScript.Arguments.Named("FRemitentes"), _
                         WScript.Arguments.Named("TRemitentes"), _
                         db_Remitentes, _
                         tbl_Remitentes, _
                         bol_RemitentesTXT, _
                         "Error 2, falta argumento " & _
                         "requerido con nombre: " & _
                         "/FRemitentes (fichero)" & vbCrLf, _
                         str_Error, _
                         bol_Error2, _
                         str_ConRemitentes)

    'Revisamos los parámetros de datos de destinatarios
    Call s_ControlLibros(WScript.Arguments.Named("FDestinatarios"), _
                         WScript.Arguments.Named("TDestinatarios"), _
                         db_Destinatarios, _
                         tbl_Destinatarios, _
                         bol_DestinatariosTXT, _
                         "Error 2, falta argumento " & _
                         "requerido con nombre: " & _
                         "/FDestinatarios (fichero)" & vbCrLf, _
                         str_Error, _
                         bol_Error2, _
                         str_ConDestinatarios)

    'Revisamos que esté el argumento requerido 
    '/HTML (fichero)
    If WScript.Arguments.Named.Exists("HTML") Then

        Set obj_FS = CreateObject("Scripting.FileSystemObject")
        Set obj_TS = obj_FS.OpenTextFile ( _
             WScript.Arguments.Named("HTML"))

        str_HTML = obj_TS.ReadAll

        obj_TS.Close
        Set obj_TS = Nothing
        Set obj_FS = Nothing

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/HTML (fichero)" & vbCrLf
        bol_Error2 = True

    End If

    'Revisamos que esté el argumento
    '/FImagen (fichero)
    If WScript.Arguments.Named.Exists("FImagen") Then

        str_IMG = _
            WScript.Arguments.Named("FImagen")

    End If

    'Revisamos que esté el argumento
    '/EImagen (etiqueta_imagen)
    If WScript.Arguments.Named.Exists("EImagen") Then

        lbl_IMG =  _
               "<!--" & _
               WScript.Arguments.Named("EImagen") & _
               "-->"
               
    Else
    
        lbl_IMG = "<!--imagen-->"

    End If

    'Revisamos que esté el argumento
    '/Log (fichero)
    If WScript.Arguments.Named.Exists("Log") Then

        str_Log =  _
               WScript.Arguments.Named("Log")

    End If

    'Revisamos que esté el argumento requerido 
    '/Usuario (nombre_usuario)
    If WScript.Arguments.Named.Exists("Usuario") Then

        str_Usuario =  _
               WScript.Arguments.Named("Usuario")

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/Usuario (nombre_usuario)" & vbCrLf
        bol_Error2 = True

    End If

    'Revisamos que esté el argumento requerido 
    '/Clave (contraseña_usuario)
    If WScript.Arguments.Named.Exists("Clave") Then

        str_Clave =  _
               WScript.Arguments.Named("Clave")

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/Clave (contraseña_usuario)" & vbCrLf
        bol_Error2 = True

    End If

    'Revisamos que esté el argumento requerido 
    '/DireccionEnvio (remitente)
    If WScript.Arguments.Named.Exists("DireccionEnvio") Then

        str_Remitente =  _
               WScript.Arguments.Named("DireccionEnvio")

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/DireccionEnvio (remitente)" & vbCrLf
        bol_Error2 = True

    End If


    'Revisamos que esté el argumento requerido 
    '/Servidor (servidor_smtp)
    If WScript.Arguments.Named.Exists("Servidor") Then

        str_SMTPsvr =  _
               WScript.Arguments.Named("servidor")

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/Servidor (servidor_smtp)" & vbCrLf
        bol_Error2 = True

    End If

    'Revisamos que esté el argumento
    '/Asunto (texto)
    If WScript.Arguments.Named.Exists("Asunto") Then

        str_Asunto =  _
               WScript.Arguments.Named("Asunto")
               
    Else
    
        str_Asunto = "Aviso del Administrador de Correo"

    End If

    'Preparamos las variables de devolucion:
    'el entero como suma de los posibles errores 1, 2 y 4
    int_Error = Abs(bol_Error1) + _
                (2 * Abs(bol_Error2)) + _
                (4 * Abs(bol_Error4))
    'La devolucion de la función será True en caso de
    'haber alguno de los errores
    bol_Devolucion = (bol_Error1 Or bol_Error2 Or bol_Error4)

    'Hacemos la devolución de la función
    f_RevisarArgumentos = bol_Devolucion

End Function 'f_RevisarArgumentos

Sub s_Ayuda(str_Error)
'***********************************************************************
'* Procedimiento: s_Ayuda                                              *
'* Tipo         : Método                                               *
'* Devolución   : Ninguna                                              *
'* Fecha y Hora : 05/02/2009 13:04:13                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Este procedimiento muestra la ayuda en línea.        *
'*                Recibe un parámetro de tipo cadena que si viene      *
'*                será mostrado antes de la línea; pensado para que    *
'*                se muestre un error que se haya detectado.           *
'***********************************************************************

    'Si hay que mostrar algún texto previo a la ayuda, lo hacemos
    If Len(str_Error) > 0 Then

        WScript.Echo str_Error & vbCrLf & vbCrLf

    End If

    'A continuación, mostramos la ayuda por pantalla
    WScript.Echo "Este script tiene por finalidad comunicar, a los " & _
                 "remitentes de los correos"
    WScript.Echo "recibidos por determinados usuarios, que la cuent" & _
                 "a de correo a la que enviaron"
    WScript.Echo "el correo se cambia por otra, para que así actual" & _
                 "icen su libreta de"
    WScript.Echo "direcciones. Para realizar esto, recibe un log, e" & _
                 "n un libro de Excel, de los"
    WScript.Echo "correos recibidos y busca si los destinatarios es" & _
                 "tán en la lista de correos que"
    WScript.Echo "se actualizan, lista que está en otro libro de Ex" & _
                 "cel. El script envía un sólo"
    WScript.Echo "correo por cada pareja remitente-destinatario, no" & _
                 " uno por cada correo recibido."
    WScript.Echo "Está pensado para obtener un listado de correo r" & _
                 "ecibido al día y ser ejecutado"
    WScript.Echo "una vez al día (al día o el período de tiempo que" & _
                 " se estime conveniente)"
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "cscript [//nologo] disclaimer.vbs /FRemitentes:fi" & _
                 "chero /FDestinatarios:fichero"
    WScript.Echo "/HTML:fichero /Usuario:nombre_usuario /Clave:cont" & _
                 "raseña_usuario"
    WScript.Echo "/DireccionEnvio:remitente /Servidor:equipo [/CNom" & _
                 "bre:campo_nombre]"
    WScript.Echo "[/CApellidos:campo_apellidos] [/CEmailViejo:campo" & _
                 "_smtp]"
    WScript.Echo "[/CEmailNuevo:campo_cuenta_nueva] [/CRemitente:ca" & _
                 "mpo_remitente]"
    WScript.Echo "[/CDestinatario:campo_destinatario] [/Enombre:eti" & _
                 "queta_nombre]"
    WScript.Echo "[/Eapellidos:etiqueta_apellidos] [/EEmailViejo:et" & _
                 "iqueta_email_viejo]"
    WScript.Echo "[/EEmailNuevo:etiqueta_email_nuevo] [/FImagen:fic" & _
                 "hero_imagen]"
    WScript.Echo "[/Eimagen:etiqueta_imagen] [/TRemitentes:nombre_t" & _
                 "abla]"
    WScript.Echo "[/TDestinatarios:nombre_tabla] [/Log:fichero] [/A" & _
                 "sunto:texto] [/?]"
    WScript.Echo ""
    WScript.Echo "Siendo"
    WScript.Echo ""
    WScript.Echo "- /CNombre: campo_nombre (Opcional):"
    WScript.Echo "Texto del encabezado de columna (es decir, nombre" & _
                 " del campo),"
    WScript.Echo "de la columna con el nombre del usuario en el lib" & _
                 "ro de"
    WScript.Echo "destinatarios, por ejemplo ""No"". Si se omite se" & _
                 " usará ""Nombre""."
    WScript.Echo "En ADO, cuando se trata de ficheros, ya sean Exce" & _
                 "l, CSV o TAB,"
    WScript.Echo "se considera como nombre de campo los datos de la" & _
                 " primera línea"
    WScript.Echo "del fichero"
    WScript.Echo ""
    WScript.Echo "- /CApellidos: campo_apellidos (Opcional):"
    WScript.Echo "Texto del encabezado de columna (es decir, nombre" & _
                 " del campo),"
    WScript.Echo "de la columna con los apellidos del usuario en el" & _
                 " libro de"
    WScript.Echo "destinatarios, por ejemplo ""Ap"". Si se omite se" & _
                 " usará"
    WScript.Echo """Apellidos"". En ADO, cuando se trata de fichero" & _
                 "s, ya sean"
    WScript.Echo "Excel, CSV o TAB, se considera como nombre de cam" & _
                 "po los datos"
    WScript.Echo "de la primera línea del fichero"
    WScript.Echo ""
    WScript.Echo "- /CEmailViejo: campo_smtp (Opcional):"
    WScript.Echo "Texto del encabezado de columna (es decir, nombre" & _
                 " del campo),"
    WScript.Echo "de la columna con la lista de direcciones SMTP, s" & _
                 "eparadas por"
    WScript.Echo "punto y coma, del usuario en el libro de destinat" & _
                 "arios, por"
    WScript.Echo "ejemplo ""Direcciones"". Si se omite se usará ""s" & _
                 "mtp"". En ADO,"
    WScript.Echo "cuando se trata de ficheros, ya sean Excel, CSV o" & _
                 " TAB, se"
    WScript.Echo "considera como nombre de campo los datos de la pr" & _
                 "imera línea"
    WScript.Echo "del fichero"
    WScript.Echo ""
    WScript.Echo "- /CEmailNuevo: campo_cuenta_nueva (Opcional):"
    WScript.Echo "Texto del encabezado de columna (es decir, nombre" & _
                 " del campo),"
    WScript.Echo "de la columna con la nueva dirección de correo de" & _
                 "l usuario en"
    WScript.Echo "el libro de destinatarios, por ejemplo ""EmailN""" & _
                 ". Si se omite se"
    WScript.Echo "usará ""nuevo"". En ADO, cuando se trata de fiche" & _
                 "ros, ya sean"
    WScript.Echo "Excel, CSV o TAB, se considera como nombre de cam" & _
                 "po los datos"
    WScript.Echo "de la primera línea del fichero"
    WScript.Echo ""
    WScript.Echo "- /CRemitente: campo_remitente (Opcional):"
    WScript.Echo "Texto del encabezado de columna (es decir, nombre" & _
                 " del campo),"
    WScript.Echo "de la columna con la dirección de correo del remi" & _
                 "tente en el"
    WScript.Echo "libro de remitentes por ejemplo ""Desde"". Si se " & _
                 "omite se usará"
    WScript.Echo """Desde"". En ADO, cuando se trata de ficheros, y" & _
                 "a sean Excel,"
    WScript.Echo "CSV o TAB, se considera como nombre de campo los " & _
                 "datos de la"
    WScript.Echo "primera línea del fichero"
    WScript.Echo ""
    WScript.Echo "- /CDestinatario: campo_destinatario (Opcional):"
    WScript.Echo "Texto del encabezado de columna (es decir, nombre" & _
                 " del campo),"
    WScript.Echo "de la columna con la dirección de correo del dest" & _
                 "inatario en el"
    WScript.Echo "libro de remitentes por ejemplo ""Destinatario""." & _
                 " Si se omite, se"
    WScript.Echo "usará ""Para"". En ADO, cuando se trata de ficher" & _
                 "os, ya sean"
    WScript.Echo "Excel, CSV o TAB, se considera como nombre de cam" & _
                 "po los datos"
    WScript.Echo "de la primera línea del fichero"
    WScript.Echo ""
    WScript.Echo "- /Enombre: etiqueta_nombre (Opcional):"
    WScript.Echo "Nombre de la etiqueta, en el HTML de la plantilla" & _
                 ", que debe ser"
    WScript.Echo "sustituida por el nombre del usuario; por ejemplo" & _
                 " ""No"". En el"
    WScript.Echo "HTML de la plantilla se deberá escribir como si f" & _
                 "uera un"
    WScript.Echo "comentario; siguiendo con el ejemplo ""<!-No-->""" & _
                 ". Si se omite se"
    WScript.Echo "usará ""Nombre"""
    WScript.Echo ""
    WScript.Echo "- /Eapellidos: etiqueta_apellidos (Opcional):"
    WScript.Echo "Nombre de la etiqueta, en el HTML de la plantilla" & _
                 ", que debe ser"
    WScript.Echo "sustituida por los apellidos del usuario; por eje" & _
                 "mplo ""Ap"". En"
    WScript.Echo "el HTML de la plantilla se deberá escribir como s" & _
                 "i fuera un"
    WScript.Echo "comentario; siguiendo con el ejemplo ""<!--Ap-->" & _
                 """. Si se omite,"
    WScript.Echo "se usará ""Apellidos"""
    WScript.Echo ""
    WScript.Echo "- /EEmailViejo: etiqueta_email_viejo (Opcional):"
    WScript.Echo "Nombre de la etiqueta, en el HTML de la plantilla" & _
                 ", que debe ser"
    WScript.Echo "sustituida por la dirección de correo vieja del u" & _
                 "suario; por"
    WScript.Echo "ejemplo ""emailn"". En el HTML de la plantilla se" & _
                 " deberá escribir"
    WScript.Echo "como si fuera un comentario, siguiendo con el ejemplo"
    WScript.Echo """<!--emailn-->"". Si se omite se usará ""Viejo"""
    WScript.Echo ""
    WScript.Echo "- /EEmailNuevo: etiqueta_email_nuevo (Opcional):"
    WScript.Echo "Nombre de la etiqueta, en el HTML de la plantilla" & _
                 ", que debe ser"
    WScript.Echo "sustituida por la dirección de correo nueva del u" & _
                 "suario; por"
    WScript.Echo "ejemplo ""emailn"". En el HTML de la plantilla se" & _
                 " deberá escribir"
    WScript.Echo "como si fuera un comentario, siguiendo con el ejemplo"
    WScript.Echo """<!--emailn-->"". Si se omite se usará ""nuevo"""
    WScript.Echo ""
    WScript.Echo "- /FImagen: fichero_imagen (Opcional):"
    WScript.Echo "Ruta y nombre del fichero de imagen que se desea " & _
                 "incrustar, por"
    WScript.Echo "ejemplo como firma. Si se omite, no se incluirá n" & _
                 "inguna imágen"
    WScript.Echo ""
    WScript.Echo "- /Eimagen: etiqueta_imagen (Opcional):"
    WScript.Echo "Nombre de la etiqueta, en el HTML de la plantilla" & _
                 ", que debe ser"
    WScript.Echo "sustituida por la ruta y nombre del archivo de im" & _
                 "agen a"
    WScript.Echo "incrustar; por ejemplo ""Img"". En el HTML de la " & _
                 "plantilla se"
    WScript.Echo "deberá escribir como si fuera un comentario; sigu" & _
                 "iendo con el"
    WScript.Echo "ejemplo ""<!-Img-->"". Si se omite, y no se ha om" & _
                 "itido"
    WScript.Echo "/ImagenFirma, se usará ""imagen"""
    WScript.Echo ""
    WScript.Echo "- /FRemitentes: fichero (Requerido):"
    WScript.Echo "Ruta y nombre del libro de Excel, o fichero de te" & _
                 "xto de valores"
    WScript.Echo "separados por comas (csv) o tabuladores (tab), o " & _
                 "carpeta en la"
    WScript.Echo "que está el fichero de texto, en el que está el l" & _
                 "istado de"
    WScript.Echo "correos recibidos y los destinatarios a los que s" & _
                 "e enviaba"
    WScript.Echo "(listado que se obtiene, por ejemplo, de Barracud" & _
                 "a). Debe tener"
    WScript.Echo "como datos, al menos, los campos de remitente y d" & _
                 "estinatario."
    WScript.Echo "En caso de tratarse un  fichero CSV o TAB, puede " & _
                 "tratarse sólo"
    WScript.Echo "de la ruta de la carpeta en la que está el ficher" & _
                 "o, en cuyo"
    WScript.Echo "caso es requerido que se pase el argumento /TRemi" & _
                 "tentes con el"
    WScript.Echo "nombre del fichero, si la ruta; si se pasa en /FR" & _
                 "emitentes la"
    WScript.Echo "ruta y el nombre del fichero, no es necesario pas" & _
                 "ar el"
    WScript.Echo "argumento /TRemitentes, es más, en caso de pasars" & _
                 "e será ignorado"
    WScript.Echo ""
    WScript.Echo "- /FDestinatarios: fichero (Requerido):"
    WScript.Echo "Ruta y nombre del libro Excel, o fichero de texto" & _
                 " de valores"
    WScript.Echo "separados por comas (csv) o tabuladores (tab), o " & _
                 "carpeta en la"
    WScript.Echo "que está el fichero de texto, con los usuarios qu" & _
                 "e deben ser"
    WScript.Echo "tenidos en cuenta en el proceso. Debe tener como " & _
                 "datos, al"
    WScript.Echo "menos, el nombre, los apellidos, la lista de dire" & _
                 "cciones de"
    WScript.Echo "correo SMTP, separadas por puntos y comas, y la d" & _
                 "irección de"
    WScript.Echo "correo nueva. En caso de tratarse un  fichero CSV" & _
                 " o TAB, puede"
    WScript.Echo "tratarse sólo de la ruta de la carpeta en la que " & _
                 "está el"
    WScript.Echo "fichero, en cuyo caso es requerido que se pase el" & _
                 " argumento"
    WScript.Echo "/TDestinatarios con el nombre del fichero, si la " & _
                 "ruta; si se"
    WScript.Echo "pasa en /FDestinatarios la ruta y el nombre del f" & _
                 "ichero, no es"
    WScript.Echo "necesario pasar el argumento /TDestinatarios, es " & _
                 "más, en caso"
    WScript.Echo "de pasarse será ignorado"
    WScript.Echo ""
    WScript.Echo "- /TRemitentes: nombre_tabla (Opcional):"
    WScript.Echo "Nombre de la hoja del libro de Excel, o del fiche" & _
                 "ro de texto"
    WScript.Echo "CSV o TAB,  de remitentes en la que están los dat" & _
                 "os (por"
    WScript.Echo "ejemplo ""Remitentes"" o ""Remitentes.tab""). Si " & _
                 "se omite, y el"
    WScript.Echo "fichero de remitentes es un libro de Excel, se us" & _
                 "ará ""Hoja1"";"
    WScript.Echo "en el caso de que el fichero de remitentes sea de" & _
                 " CSV o TAB,"
    WScript.Echo "deberá ser pasado de forma obligatoria el nombre " & _
                 "del fichero"
    WScript.Echo "(sin ruta), a no ser que en el parámetro /FRemite" & _
                 "ntes se"
    WScript.Echo "incluya el nombre y ruta del fichero"
    WScript.Echo ""
    WScript.Echo "- /TDestinatarios: nombre_tabla (Opcional):"
    WScript.Echo "Nombre de la hoja del libro de Excel, o del fiche" & _
                 "ro de texto"
    WScript.Echo "CSV o TAB, de destinatarios en la que están los d" & _
                 "atos (por"
    WScript.Echo "ejemplo ""Usuarios"" o ""Usuarios.csv""). Si se o" & _
                 "mite, y el fichero"
    WScript.Echo "de remitentes es un libro de Excel, se usará ""Ho" & _
                 "ja1""; en el"
    WScript.Echo "caso de que el fichero de remitentes sea de CSV o" & _
                 " TAB, deberá"
    WScript.Echo "ser pasado de forma obligatoria el nombre del fic" & _
                 "hero (sin"
    WScript.Echo "ruta), a no ser que en el parámetro/FDestinatario" & _
                 "s se incluya"
    WScript.Echo "el nombre y ruta del fichero"
    WScript.Echo ""
    WScript.Echo "- /HTML: fichero (Requerido):"
    WScript.Echo "Ruta y nombre del fichero de texto con el código " & _
                 "HTML del"
    WScript.Echo "mensaje. Debe ser creado poniendo las etiquetas"
    WScript.Echo "correspondientes a los campos de nombre, apellido" & _
                 "s, dirección"
    WScript.Echo "de correo vieja, dirección de correo nueva eimage" & _
                 "n, si se ha incluído una. Por  ejemplo, el"
    WScript.Echo "contenido de este fichero sería algo así:" & vbCrLf
    WScript.Echo "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Tra" & _
                 "nsitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD" & _
                 "/xhtml1-transitional.dtd"">"
    WScript.Echo "<html xmlns=""http://www.w3.org/1999/xhtml"">"
    WScript.Echo "  <head>"
    WScript.Echo "    <meta http-equiv=""Content-Type"" conten t=" & _
                 """text/html;charset=iso-8859-1"" />"
    WScript.Echo "    <title>Aviso de cambio de cuenta de correo</t" & _
                 "itle>"
    WScript.Echo "    <style type=""text/css"">"
    WScript.Echo "      <!--"
    WScript.Echo "        body {"
    WScript.Echo "               font-family: Verdana, Arial, Helvet" & _
                 "ica, sans-serif;"
    WScript.Echo "               font-size: small;"
    WScript.Echo "               font-style: normal;"
    WScript.Echo "               line-height: normal;"
    WScript.Echo "               font-weight:normal;"
    WScript.Echo "               font-variant: normal;"
    WScript.Echo "               color: #000000;"
    WScript.Echo "               text-decoration: none;"
    WScript.Echo "               background-color: #FFFFCC"
    WScript.Echo "               text-align: justify;"
    WScript.Echo "             }"
    WScript.Echo "      -->"
    WScript.Echo "    </style>"
    WScript.Echo "  </head>"
    WScript.Echo "  <body>"
    WScript.Echo "    <p>"
    WScript.Echo "      Recientemente ha enviado uno o m&aacute;s c" & _
                 "orreos a <!--nombre--> <!--apellidos-->, a la dir" & _
                 "ecci&oacute;n de correo <!--viejo-->. Esta cuenta" & _
                 " se cambia a <!--nuevo-->, por lo que le agradece" & _
                 "r&iacute;amos que actualice este contacto en su l" & _
                 "ibreta de direcciones para que en lo sucesivo los" & _
                 " correos enviados a <!--nombre--> <!--apellidos--" & _
                 "> se env&iacute;en a la direcci&oacute;n <!--nuev" & _
                 "o--><br />  <br />"
    WScript.Echo "      Muchas gracias por su atención<br /><br />"
    WScript.Echo "      Atentamente:<br /><br />"
    WScript.Echo "      Sr. Vicente<br />"
    WScript.Echo "      Superintendente<br />"
    WScript.Echo "      T&eacute;cnicos de Investigaci&oacute;n Aer" & _
                 "oterr&aacute;quea (TIA)"
    WScript.Echo "    </p>"
    WScript.Echo "    <p>"
    WScript.Echo "      <img src=""<!--imagen-->"" /><br />"
    WScript.Echo "    </p>"
    WScript.Echo "  </body>"
    WScript.Echo "</html>"
    WScript.Echo ""
    WScript.Echo "- /Log: fichero (Opcional):"
    WScript.Echo "Ruta y nombre del fichero de valores separados po" & _
                 "r tabuladores"
    WScript.Echo "en el que se reflejarán los resultados del envío;" & _
                 " al nombre de"
    WScript.Echo "fichero indicado se le pondrá como sufijo la fech" & _
                 "a en formato"
    WScript.Echo "YYYYMMDD-HHMM. Si se omite, se mostrarán por pantalla"
    WScript.Echo ""
    WScript.Echo "- /Usuario: nombre_usuario (Requerido):"
    WScript.Echo "Nombre del usuario que se conectará al servidor S" & _
                 "MTP para"
    WScript.Echo "realizar el envío de los correos"
    WScript.Echo ""
    WScript.Echo "- /Clave: contraseña_usuario (Requerido):"
    WScript.Echo "Contraseña del usuario que se conectará al servid" & _
                 "or SMTP para"
    WScript.Echo "realizar el envío de los correos"
    WScript.Echo ""
    WScript.Echo "- /DireccionEnvio: remitente (Requerido):"
    WScript.Echo "Remitente de los mensajes que se enviarán (aparec" & _
                 "e domo campo"
    WScript.Echo """De"" en el correo)"
    WScript.Echo ""
    WScript.Echo "- /Asunto: texto (Opcional):"
    WScript.Echo "Texto que aparece como asunto de los correos envi" & _
                 "ados. Si se"
    WScript.Echo "omite el asunto será ""Aviso del Administrador de" & _
                 " Correo"""
    WScript.Echo ""
    WScript.Echo "- /Servidor: equipo (Requerido):"
    WScript.Echo "Nombre o IP del servidor SMTP que se utilizará pa" & _
                 "ra enviar el"
    WScript.Echo "correo"
    WScript.Echo ""
    WScript.Echo "- /?: ayuda (Opcional):"
    WScript.Echo "Muestra la ayuda en línea"
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo "Ejemplos:"
    WScript.Echo ""
    WScript.Echo "- Se envía el aviso a los remitentes listados en"
    WScript.Echo "\\tiaflsrv01\correo\barracuda.xls que dirija un c" & _
                 "orreos a los destinatarios"
    WScript.Echo "listados en \\tiaflsrv01\correo\cuentas-cambiadas" & _
                 ".xlsx. Los resultados se"
    WScript.Echo "muestran por pantalla. El código HTML del mensaje" & _
                 " enviado está en el fichero"
    WScript.Echo "\\tiaflsrv01\correo\comunicado-cambio.htm. Los co" & _
                 "rreos se enviarán con el"
    WScript.Echo "usuario TIA\svicente con contraseña OfeliaFoca, a" & _
                 "pareciendo como remitente la"
    WScript.Echo "dirección de correo ""Superintendente Vicente <sv" & _
                 "icente@tia.org>"". Para el"
    WScript.Echo "envío, se usará el servidor SMTP bacteriosrv.tia.org:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo disclaimer.vbs /FRemitentes:\\ti" & _
                 "aflsrv01\correo\barracuda.xls"
    WScript.Echo "/FDestinatarios:\\tiaflsrv01\correo\cuentas-cambi" & _
                 "adas.xlsx"
    WScript.Echo "/HTML:\\tiaflsrv01\correo\comunicado-cambio.htm /" & _
                 "Usuario:TIA\svicente"
    WScript.Echo "/Clave:OfeliaFoca /DireccionEnvio:""Superintenden" & _
                 "te Vicente <svicente@tia.org>"""
    WScript.Echo "/Servidor:bacteriosrv.tia.org"
    WScript.Echo ""
    WScript.Echo "- Se envía el aviso a los remitentes listados en"
    WScript.Echo "\\tiaflsrv01\correo\barracuda.xls que dirija un c" & _
                 "orreos a los destinatarios"
    WScript.Echo "listados en \\tiaflsrv01\correo\cuentas-cambiadas" & _
                 ".xlsx. Los resultados se"
    WScript.Echo "guardan en el fichero de valores separados por ta" & _
                 "buladores"
    WScript.Echo "\\tiaflsrv01\correo\comunicado.csv. El código HTM" & _
                 "L del mensaje enviado está en"
    WScript.Echo "el fichero \\tiaflsrv01\correo\comunicado-cambio." & _
                 "htm y se incluirá la imagen"
    WScript.Echo "\\tiaflsrv01\correo\tia.jpg. Los correos se envia" & _
                 "rán con el usuario"
    WScript.Echo "TIA\svicente con contraseña OfeliaFoca, aparecien" & _
                 "do como remitente la dirección"
    WScript.Echo "de correo ""Superintendente Vicente <svicente@tia" & _
                 ".org>"". Para el envío, se usará"
    WScript.Echo "el servidor SMTP bacteriosrv.tia.org:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo disclaimer.vbs /FImagen:\\tiafls" & _
                 "rv01\correo\tia.jpg"
    WScript.Echo "/FRemitentes:\\tiaflsrv01\correo\barracuda.xls"
    WScript.Echo "/FDestinatarios:\\tiaflsrv01\correo\cuentas-cambi" & _
                 "adas.xlsx"
    WScript.Echo "/HTML:\\tiaflsrv01\correo\comunicado-cambio.htm"
    WScript.Echo "/Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:" & _
                 "TIA\svicente /Clave:OfeliaFoca"
    WScript.Echo "/DireccionEnvio:""Superintendente Vicente <svicen" & _
                 "te@tia.org>"""
    WScript.Echo "/Servidor:bacteriosrv.tia.org"
    WScript.Echo ""
    WScript.Echo "- Se envía el aviso a los remitentes listados en"
    WScript.Echo "\\tiaflsrv01\correo\barracuda.xls que dirija un c" & _
                 "orreos a los destinatarios"
    WScript.Echo "listados en \\tiaflsrv01\correo\cuentas-cambiadas" & _
                 ".xlsx. Los resultados se"
    WScript.Echo "guardan en el fichero de valores separados por ta" & _
                 "buladores"
    WScript.Echo "\\tiaflsrv01\correo\comunicado.csv. El código HTM" & _
                 "L del mensaje enviado está en"
    WScript.Echo "el fichero \\tiaflsrv01\correo\comunicado-cambio." & _
                 "htm y se incluirá la imagen"
    WScript.Echo "\\tiaflsrv01\correo\tia.jpg. Los nombres de los c" & _
                 "ampos del fichero de"
    WScript.Echo "Remitentes son Desde para el remitente y Destinat" & _
                 "ario para el destinatario. Los"
    WScript.Echo "correos se enviarán con el usuario TIA\svicente c" & _
                 "on contraseña OfeliaFoca,"
    WScript.Echo "apareciendo como remitente la dirección de correo" & _
                 " ""Superintendente Vicente"
    WScript.Echo "<svicente@tia.org>"". Para el envío, se usará el " & _
                 "servidor SMTP"
    WScript.Echo "bacteriosrv.tia.org:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo disclaimer.vbs /CRemitente:Desde" & _
                 " /CDestinatario:Destinatario"
    WScript.Echo "/FImagen:\\tiaflsrv01\correo\tia.jpg"
    WScript.Echo "/FRemitentes:\\tiaflsrv01\correo\barracuda.xls"
    WScript.Echo "/FDestinatarios:\\tiaflsrv01\correo\cuentas-cambi" & _
                 "adas.xlsx"
    WScript.Echo "/HTML:\\tiaflsrv01\correo\comunicado-cambio.htm"
    WScript.Echo "/Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:" & _
                 "TIA\svicente /Clave:OfeliaFoca"
    WScript.Echo "/DireccionEnvio:""Superintendente Vicente <svicen" & _
                 "te@tia.org>"""
    WScript.Echo "/Servidor:bacteriosrv.tia.org"
    WScript.Echo ""
    WScript.Echo "- Se envía el aviso a los remitentes listados en"
    WScript.Echo "\\tiaflsrv01\correo\barracuda.xls que dirija un c" & _
                 "orreos a los destinatarios"
    WScript.Echo "listados en \\tiaflsrv01\correo\cuentas-cambiadas" & _
                 ".xlsx. Los resultados se"
    WScript.Echo "guardan en el fichero de valores separados por ta" & _
                 "buladores"
    WScript.Echo "\\tiaflsrv01\correo\comunicado.csv. El código HTM" & _
                 "L del mensaje enviado está en"
    WScript.Echo "el fichero \\tiaflsrv01\correo\comunicado-cambio." & _
                 "htm y se incluirá la imagen"
    WScript.Echo "\\tiaflsrv01\correo\tia.jpg. Los nombres de los c" & _
                 "ampos del fichero de"
    WScript.Echo "Remitentes son Desde para el remitente y Destinat" & _
                 "ario para el destinatario.."
    WScript.Echo "Lon nombres de los campos del fichero de destinat" & _
                 "ario son No para el nombre, Ap"
    WScript.Echo "para los apellidos, Direcciones para las direccio" & _
                 "nes SMTP y EmailN para la"
    WScript.Echo "nueva dirección de correo. Los correos se enviará" & _
                 "n con el usuario TIA\svicente"
    WScript.Echo "con contraseña OfeliaFoca, apareciendo como remit" & _
                 "ente la dirección de correo"
    WScript.Echo """Superintendente Vicente <svicente@tia.org>"". P" & _
                 "ara el envío, se usará el"
    WScript.Echo "servidor SMTP bacteriosrv.tia.org:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo disclaimer.vbs /CNombre:No /CApe" & _
                 "llidos:Ap"
    WScript.Echo "/CEmailViejo:Direcciones /CEmailNuevo:EmailN /CRe" & _
                 "mitente:Desde"
    WScript.Echo "/CDestinatario:Destinatario /FImagen:\\tiaflsrv01" & _
                 "\correo\tia.jpg"
    WScript.Echo "/FRemitentes:\\tiaflsrv01\correo\barracuda.xls"
    WScript.Echo "/FDestinatarios:\\tiaflsrv01\correo\cuentas-cambi" & _
                 "adas.xlsx"
    WScript.Echo "/HTML:\\tiaflsrv01\correo\comunicado-cambio.htm"
    WScript.Echo "/Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:" & _
                 "TIA\svicente /Clave:OfeliaFoca"
    WScript.Echo "/DireccionEnvio:""Superintendente Vicente <svicen" & _
                 "te@tia.org>"""
    WScript.Echo "/Servidor:bacteriosrv.tia.org"
    WScript.Echo ""
    WScript.Echo "- Se envía el aviso a los remitentes listados en"
    WScript.Echo "\\tiaflsrv01\correo\barracuda.xls que dirija un c" & _
                 "orreos a los destinatarios"
    WScript.Echo "listados en \\tiaflsrv01\correo\cuentas-cambiadas" & _
                 ".xlsx. Los resultados se"
    WScript.Echo "guardan en el fichero de valores separados por ta" & _
                 "buladores"
    WScript.Echo "\\tiaflsrv01\correo\comunicado.csv. El código HTM" & _
                 "L del mensaje enviado está en"
    WScript.Echo "el fichero \\tiaflsrv01\correo\comunicado-cambio." & _
                 "htm y se incluirá la imagen"
    WScript.Echo "\\tiaflsrv01\correo\tia.jpg. Los nombres de los c" & _
                 "ampos del fichero de"
    WScript.Echo "Remitentes son Desde para el remitente y Destinat" & _
                 "ario para el destinatario.."
    WScript.Echo "Lon nombres de los campos del fichero de destinat" & _
                 "ario son No para el nombre, Ap"
    WScript.Echo "para los apellidos, Direcciones para las direccio" & _
                 "nes SMTP y EmailN para la"
    WScript.Echo "nueva dirección de correo. En el fichero HTML, la" & _
                 "s etiquetas de los datos son"
    WScript.Echo "{ENombre} para el nombre, {EApellidos} para los a" & _
                 "pellidos, Enuevo para la"
    WScript.Echo "dirección de correo vieja y Eviejo para la direcc" & _
                 "ión de correo nueva. Los"
    WScript.Echo "correos se enviarán con el usuario TIA\svicente c" & _
                 "on contraseña OfeliaFoca,"
    WScript.Echo "apareciendo como remitente la dirección de correo" & _
                 " ""Superintendente Vicente"
    WScript.Echo "<svicente@tia.org>"". El asunto de los mensajes s" & _
                 "erá ""Atencion: actualice su"
    WScript.Echo "libreta de direcciones"". Para el envío, se usará" & _
                 " el servidor SMTP"
    WScript.Echo "bacteriosrv.tia.org:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo disclaimer.vbs /CNombre:No /CApe" & _
                 "llidos:Ap"
    WScript.Echo "/CEmailViejo:Direcciones /CEmailNuevo:EmailN /CRe" & _
                 "mitente:Desde"
    WScript.Echo "/CDestinatario:Destinatario /Enombre:No /Eapellid" & _
                 "os:Ap /EEmailViejo:Enuevo"
    WScript.Echo "/EEmailNuevo:Eviejo /FImagen:\\tiaflsrv01\correo\" & _
                 "tia.jpg"
    WScript.Echo "/FRemitentes:\\tiaflsrv01\correo\barracuda.xls"
    WScript.Echo "/FDestinatarios:\\tiaflsrv01\correo\cuentas-cambi" & _
                 "adas.xlsx"
    WScript.Echo "/HTML:\\tiaflsrv01\correo\comunicado-cambio.htm"
    WScript.Echo "/Log:\\tiaflsrv01\correo\comunicado.csv /Usuario:" & _
                 "TIA\svicente /Clave:OfeliaFoca"
    WScript.Echo "/DireccionEnvio:""Superintendente Vicente <svicen" & _
                 "te@tia.org>"" /Asunto:""Atencion:"
    WScript.Echo "actualice su libreta de direcciones"" /Servidor:b" & _
                 "acteriosrv.tia.org"
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo ""

End Sub 's_Ayuda

Function f_RecordsetADO(ado_Conexion, str_Tabla, _
                        str_Consulta) 'As ADODB.Recordset
'***********************************************************************
'* Procedimiento: f_RecordsetADO                                       *
'* Tipo         : Función                                              *
'* Devolución   : ADODB.Recordset                                      *
'* Fecha y Hora : 2008-02-29 17:47:10                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe una conexión ADO y un nombre de  *
'*                tabla y devuelve un ADODB.Recordset con los datos de *
'*                la tabla recibida. Si se pasa vacío el parámetro     *
'*                tabla, se creará la consulta que se reciba con el    *
'*                parámetro str_Consulta, que es una consulta SQL      *
'***********************************************************************

    Dim ado_Recordset 'As ADODB.Recordset
    Const adOpenStatic = 3
    Const adLockReadOnly = 1
    Const adCmdText = 1

    'Si se recibe nombre de tabla
    If Len(Trim(str_Tabla)) > 0 Then
    
        'Montamos una consulta sobre la tabla completa
        str_Consulta = "SELECT " & _
                       "        * " & _
                       "FROM " & _
                       "       " & str_Tabla
    
    End If                    

'WScript.Echo str_consulta

    'Creamos un objeto Recordset de ADO
    Set ado_Recordset = CreateObject("ADODB.Recordset")
    
    If InStr(1,str_Consulta,"$]") > 0 Then
    
        'Abrimos la consulta
        ado_Recordset.Open str_Consulta, ado_Conexion
        
    Else
    
        'Abrimos la consulta
        ado_Recordset.Open str_Consulta, ado_Conexion, adOpenStatic, adLockReadOnly, adCmdText

    End If
        
    'Devolvemos el Recordset
    Set f_RecordsetADO = ado_Recordset
    
    'Vaciamos la variable de Recordset
    Set ado_Recordset = Nothing

End Function 'f_RecordsetExcel

Function f_ConectarFichero(str_Cadena) 'As ADODB.Connection
'***********************************************************************
'* Procedimiento: f_ConectarFichero                                    *
'* Tipo         : Función                                              *
'* Devolución   : ADODB.Connection                                     *
'* Fecha y Hora : 05/02/2009 13:41:34                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe una cadena, que es la ruta y     *
'*                nombre de un libro de Excel o la ruta de la carpeta  *
'*                donde está el fichero de texto y devuelve un objeto  *
'*                conexión de ADO a ese libro Excel o esa carpeta      *
'***********************************************************************

    Dim ado_Conexion 'As ADODB.Connection
    
    'Creamos el objeto conexión
    Set ado_Conexion = CreateObject("ADODB.Connection")
    
    'Establecemos control de errores
    On Error Resume Next
    
    'Conectamos el objeto al libro Excel. Para ello obtenemos la cadena
    'de conexión llamando a la función correspondiente
    ado_Conexion.Open str_Cadena

'WScript.Echo "Cadena = " & str_Cadena
    
    'La función devuelve el objeto conexión
    Set f_ConectarFichero = ado_Conexion
    
    'Si se ha producido error
    If Err.Number <> 0 Then
    
        'Mostramos un mensaje con el error
        WScript.Echo "Error " & Err.Number & " (" & Err.Description & _
                     ") al intentar conectar por ADO al fichero " & _
                     str_Fichero
                     
        'Teminamos la ejecución de script con el número de error
        'producido
        WScript.Quit Err.Number
        
    End If
    
    'No se ha producido error, devolvemos el control de errores a
    'CScript
    On Error Goto 0
    
    'Vaciamos el objeto conexión
    Set ado_Conexion = Nothing
    
End Function 'f_ConectarALibroExcel

Function f_CadenaConexion(str_Fichero, str_Extension) 'As String
'***********************************************************************
'* Procedimiento: f_CadenaConexion                                     *
'* Tipo         : Función                                              *
'* Devolución   : Cadena                                               *
'* Fecha y Hora : 05/02/2009 13:47:36                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe una ruta más nombre de un libro  *
'*                de Excel y devuelve la cadena de conexión OleDB      *
'*                para poder abrirlo. En función de la extensión del   *
'*                libro determina si se usará el proveedor de Excel    *
'*                2007 o el de Excel 2000/2003.                        *
'*                Para poder acceder por ADO a Excel 2007 es           *
'*                necesario instalar los componentes de conectividad   *
'*                de datos de Office 2007 desde                        *
'*http://www.microsoft.com/downloads/details.aspx?displaylang=es&Famil
'*yID=7554f536-8c28-4598-9b72-ef94e038c891
'***********************************************************************

    Dim str_Devolucion 'As String
    
    'Creamos un objeto FileSystemObject
    Set obj_FS = CreateObject("Scripting.FileSystemObject")
    
    'Obtenemos la Extensión del libro Excel
    Select Case LCase(str_Extension)
    
        'Estas extensiones implican Excel 2007
        Case "xlsx","xlsm","xlsb"
        
            'Establecemos el proveedor 2007
            str_Devolucion = _
                        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Extended Properties=Excel 12.0;" & _
                        "Data Source=" & str_Fichero
        
        Case "xls"
        
            'Establecemos el proveedor 2000 - 2007
            str_Devolucion = _
                        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Extended Properties=Excel 8.0;" & _
                        "Data Source=" & str_Fichero
        
        Case "txt","csv", "asc", "tab"
                    
            str_Devolucion = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & _
                              str_Fichero & "\;Extensions=asc,csv,tab,txt;" & _
                             "Persist Security Info=False"
            
        Case Else
        
            'La función devuelve la extensión del fichero pasado
            'que no es un libro de Excel ni un fichero de texto
            'válido
            str_Devolucion = ""
    
    End Select

'WScript.Echo "str_Devolucion = " & str_Devolucion

    'Añadimos el libro a la cadena de conexión y la devolvemos
    f_CadenaConexion = str_Devolucion

End Function 'f_CadenaConexion

Function f_EnviarCorreo(str_Destinatario, str_Nombre, str_Apellidos, _
                        str_Email, str_Nuevo) 'As String
'***********************************************************************
'* Procedimiento: f_EnviarCorreo                                       *
'* Tipo         : Función                                              *
'* Devolución   : Cadena                                               *
'* Fecha y Hora : 05/02/2009 14:26:27                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función se encarga de enviar el correo,         *
'*                cambiando en la plantilla del correo los campos con  *
'*                los parámetros recibidos, es decir, el nombre y los  *
'*                apellidos y las direcciones de correo vieja y        *
'*                nueva y la dirección de correo del destinatario.     *
'*                Devuelve el resultado del envía (si hubo error o no y*
'*                en caso de haberlo cuál es éste                      *
'***********************************************************************
    
    'Declaración de constantes CDO
    Const cdoRefTypeId = 0
    Const cdoSendUsingMethod = _
	    "http://schemas.microsoft.com/cdo/configuration/sendusing"
    Const cdoSendUsingPort = 2
    Const cdoSMTPServer = _
	    "http://schemas.microsoft.com/cdo/configuration/smtpserver"
    Const cdoSMTPServerPort = _
	    "http://schemas.microsoft.com/cdo/configuration/smtpserverport"
    Const cdoSMTPConnectionTimeout = _
"http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"
    Const cdoSMTPAuthenticate = _
	"http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
    Const cdoBasic = 1
    Const cdoSendUserName = _
	    "http://schemas.microsoft.com/cdo/configuration/sendusername"
    Const cdoSendPassword = _
	    "http://schemas.microsoft.com/cdo/configuration/sendpassword"
    Const cdoSMTPUseSSL = _
	    "http://schemas.microsoft.com/cdo/configuration/smtpusessl"
	    
	'Declaración de variables
    Dim str_Mensaje    'As String
    Dim str_Devolucion 'As String
    Dim str_RefIMG     'As String
    Dim objEmail       'As CDO.Message

    'Iniciamos la devolución de la función con los datos de correo
    'a enviar    
    str_Devolucion = _
                     str_Remitente & vbTab & _
                     str_Destinatario & vbTab & _
                     str_Nombre & vbTab & _
                     str_Apellidos & vbTab & _
                     str_Email & vbTab & _
                     str_Nuevo & vbTab
             
    'Creamos el objeto correo
    Set objEmail = CreateObject("CDO.Message")

    'Establecemos el remitente
    objEmail.From = str_Remitente
    
    'Ahora el destinatario
    objEmail.To = str_Destinatario
    
    'Ahora el asunto
    objEmail.Subject = str_Asunto 
                        
    'Establecemos el mensaje. Para ello llamamos a la función que
    'devuelve el código HTML personalizado al mensaje actual
    objEmail.HTMLBody = f_HTML(str_Nombre, _
                               str_Apellidos, _
                               str_Email, _
                               str_Nuevo, _
                               str_RefIMG)
    
    'Si hay que incrustar una imagen
    If Len(Trim(str_IMG)) > 0 Then
    
        'Incrustamos el fichero de imágen como referencia
        objEmail.AddRelatedBodyPart str_IMG, _
                                    str_RefIMG, _
                                    cdoRefTypeId
        
    End If
    
    'Establecemos el envío usando un servidor de red, no uno local                    
    objEmail.Configuration.Fields.Item(cdoSendUsingMethod) = _
                                                   cdoSendUsingPort
     
    'Establecemos el servidor SMTP desde el que se enviará el correo
    objEmail.Configuration.Fields.Item(cdoSMTPServer) = str_SMTPsvr
    
    'Establecemos el puerto SMTP
    objEmail.Configuration.Fields.Item(cdoSMTPServerPort) = 25
        
    'Usaremos autenticación básica
    objEmail.Configuration.Fields.Item(cdoSMTPAuthenticate) = cdoBasic
    
    'Establecemos el usuario que conecta al servidor SMTP
    objEmail.Configuration.Fields.Item(cdoSendUserName) = str_Usuario
    
    'Establecemos la contraseña
    objEmail.Configuration.Fields.Item(cdoSendPassword) = str_Clave
    
    'El correo no se enviará por canal seguro
    objEmail.Configuration.Fields.Item(cdoSMTPUseSSL) = False
    
    'Guardamos las configuraciones del correo
    objEmail.Configuration.Fields.Update
    
    'Establecemos control de errores
    On Error Resume Next
    
    'Enviamos el correo
    objEmail.Send
    
    'Si no se produjeron errores
    If Err.Number= 0 Then
    
        'Marcamos el envío como exitoso
        str_Devolucion = str_Devolucion & _
                         "Correcto" & vbTab & _
                         "Correo enviado con éxito"
    
    'Se produjo error
    Else
    
        'Ponemos el número y la descripción del error
        str_Devolucion = str_Devolucion & _
                         "Error " & Err.Number & vbTab & _
                         Err.Description
                         
        'Vaciamos el objeto Error
        Err.Clear
        
    End If
    
    'Devolvemos el control de errores a cscript
    On Error Goto 0
    
    'Devolvemos le resultado del envío
    f_EnviarCorreo = Replace(str_Devolucion,vbCrLf,"")
    
End Function 'f_EnviarCorreo

Sub s_ControlLibros(par_BaseDatos, par_Tabla, db_BaseDatos, tbl_Datos, par_Boleano, str_Mensaje, str_Error, bol_Error2, str_Conexion)
'***********************************************************************
'* Procedimiento: s_ControlLibros                                      *
'* Tipo         : Método                                               *
'* Devolución   : Ninguna                                              *
'* Fecha y Hora : 10/02/2009 9:47:55                                   *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Este método recibe el parámetro de libro, el de      *
'*                hoja, la variable de libro y la de hoja, que son de  *
'*                salida; el método evaluará si los parámetros son     *
'*                correctos, y rellenará las variables con lo que      *
'*                corresponda, teniendo en cuenta si se trata de un    *
'*                libro de Excel o un fichero de texto de valores      *
'*                separados por comas o tabuladores. El método recibe  *
'*                una booleana que pondrá a True si se trata de un     *
'*                fichero de texto o a False si es un libro de Excel.  *
'*                Recibe además el mensaje que se debe mostrar en      *
'*                caso de encontrar Error en los parámetros, y la      *
'*                variable donde están almacenados los errores         *
'*                encontrados antes, para que el mensaje sea           *
'*                concatenado a los errores ya encontrados. Por        *
'*                último, recibe la booleana que mara si se ha         *
'*                producido error 2 (falta un argumento requerido)     *
'*                que se pondrá a True en caso de error.               *
'***********************************************************************

    Dim obj_FS 'As FileSystemObject
    Dim obj_TS 'As TextStream
    Dim str_Extension
    Dim str_Carpeta
    Dim str_Fichero
    Dim str_Contenido

'WScript.Echo "par_BaseDatos = " & par_BaseDatos
'WScript.Echo "par_Tabla = " & par_Tabla
    
    'Creamos un objeto FileSystemObject
    Set obj_FS = CreateObject("Scripting.FileSystemObject")
    
    'Si se ha recibido parámetro de libro
    If Len(Trim(par_BaseDatos)) > 0 Then
    
        'Si el parámetro es un fichero
        If obj_FS.FileExists(par_BaseDatos) Then
        
            'La extensión es la del parámetro
            str_Extension = obj_FS.GetExtensionName(par_BaseDatos)
            
            'La carpeta donde está es la carpeta que contiene el fichero
            str_Carpeta = obj_FS.GetParentFolderName (par_BaseDatos)
            
            'Obtenemos el nombre del fichero
            str_Fichero = obj_FS.GetFileName(par_BaseDatos)
        
        'Si no es un fichero el parámetro de libro, miramos
        'si lo es el de hoja    
        ElseIf obj_FS.FileExists(par_Tabla) Then
        
            'La extensión es la del parámetro hoja
            str_Extension = obj_FS.GetExtensionName(par_Tabla)
            
            'Si el parámetro libro no es un fichero, sólo
            'existe la posibilidad de que se trate de un
            'origen de texto. De no ser así, no se ha pasado
            'el parámetro de libro, y por tanto hay error,
            'pues cuando el origen es de Excel el parámetro
            'de libro tiene que ser un libro Excel
            Select Case str_Extension
            
                Case "csv", "tab", "txt", "acs"
                Case Else
                
                    str_Error = str_Error & str_Mensaje & vbCrLf
                    Set obj_FS = Nothing
                    bol_Error2 = True
                    Exit Sub
            
            End Select
            
            'La carpeta donde está es el parámetro libro
            str_Carpeta = par_BaseDatos
            
            'El fichero es el parámetro hoja
            str_Fichero = par_Tabla
            
            'Si no se ha pasado, se produce error
            If Len(Trim(str_Fichero)) = 0 Then
            
                str_Error = str_Error & _
                            "Error 2: No se ha pasado el parámetro " & _
                            "de nombre de fichero csv" & vbCrLf
                Set obj_FS = Nothing
                bol_Error2 = True
                Exit Sub
           
            End If

        'Si no se ha recibido un fichero como parámetro de libro
        'ni se ha recibido el nombre del fichero en el parámetro
        'hoja, no se ha recibido el parámetro correcto
        Else
        
            str_Error = str_Error & str_Mensaje & vbCrLf
            Set obj_FS = Nothing
            bol_Error2 = True
            Exit Sub
                    
        End If
            
    'Si existe el fichero de hoja
    ElseIf obj_FS.FileExists(par_Tabla) Then
    
        'recogemos los datos
        str_Extension = obj_FS.GetExtensionName(par_Tabla)
        str_Carpeta = par_BaseDatos
        str_Fichero = par_Tabla
    
    'No se ha recibido como fichero ni el parámetro de libro
    'ni el de hoja, por lo que falta un parámetro requerido 
    Else
    
        str_Error = str_Error & str_Mensaje & vbCrLf
        Set obj_FS = Nothing
        bol_Error2 = True
        Exit Sub
            
    End If
    
'WScript.Echo "str_Carpeta = " & str_Carpeta
'WScript.Echo "str_Fichero = " & str_Fichero
'WScript.Echo "str_Extension = " & str_Extension

        
    'Si el fichero es de texto
    If str_Extension = "tab" _
    Or str_Extension = "csv" _
    Or str_Extension = "txt" _
    Or str_Extension = "acs" Then
    
        'Cambiamos el nombre del campo "De/Desde" a "Desde", pues la barra
        'de división da error en ADO al referirse al campo. Para ello,
        'cargamos el fichero en un objeto TextStream
'WScript.Echo str_Carpeta & "\" & str_Fichero
        Set obj_TS = obj_FS.OpenTextFile(str_Carpeta & "\" & str_Fichero)
        
        'Obtenemos el texto con el reemplazo en una variable
        str_Contenido = Replace(obj_TS.ReadAll, "De/Desde", "Desde")
        
        'Cerramos el fichero
        obj_TS.Close
        
        'Vaciamos el objeto TextStream
        Set obj_TS = Nothing
        
        'Usamos ahora un TextStream para crear un fichero sobreescribiendo
        'el original
        Set obj_TS = obj_FS.CreateTextFile(str_Carpeta & "\" & str_Fichero, True)
        
        'Escribimos el texto modificado
        obj_TS.Write str_Contenido
        
        'Cerramos el fichero
        obj_TS.Close
        
        'Vaciamos el objeto TextStream
        Set obj_TS = Nothing
    
        'Retenemos la carpeta como libro
        db_BaseDatos = str_Carpeta
        
        'Retenemos el fichero como hoja
        tbl_Datos = str_Fichero
        
        'Marcamos que la booleana de texto como True
        par_Boleano = True
        
        'Establecemos la cadena de conexion
        str_Conexion = f_CadenaConexion(str_Carpeta, str_Extension)
        
    'Como el fichero es de Excel
    Else
    
        'Guardamos el parámetro de libro como libro
        db_BaseDatos = par_BaseDatos
        
        'Si no está vacío el nombre de hoja lo ponemos como nombre
        'de tabla (las hojas, en ADO para Excel, termina el nombre
        'con dolar y se encierra el conjunto entre corchetes
        If Len(Trim(par_Tabla)) > 0 Then
        
            tbl_Datos = "[" & par_Tabla & "$]"
            
        'Si no se ha recibido el nombre de hoja, establecemos el
        'predeterminado
        Else
        
            tbl_Datos = "[Hoja1$]"
            
        End If
        
        'Marcamos a False la booleana de texto
        par_Boleano = False
        
        'Obtenemos la cadena de conexion
        str_Conexion = f_CadenaConexion(str_Carpeta & _
                                        "\" & str_Fichero, str_Extension)
        
    End If
    
    'Vaciamos el objeto FileSystemObject
    Set obj_FS = Nothing

End Sub 's_ControlLibros

Function f_HTML(str_Nombre, str_Apellidos, str_Vieja, str_Nueva, _
                str_RefIMG) 'As String
'***********************************************************************
'* Procedimiento: f_HTML                                               *
'* Tipo         : Función                                              *
'* Devolución   : Cadena                                               *
'* Fecha y Hora : 10/02/2009 10:27:00                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe el nombre, los apellidos, la     *
'*                cuenta de correo antigua y la nueva y devuelve el    *
'*                código HTML del mensaje de correo. Recibe a su vez   *
'*                una variable de salida que es la referencia de la    *
'*                imagen a la hora de incrustarla en el correo         *                                             *
'***********************************************************************

	Dim obj_FS         'As FileSystemObject
    Dim str_Devolucion 'As String

    'Guardamos el contenido de la plantilla en la variable de
    'devolucion
    str_Devolucion = str_HTML
    
    'Ponemos el nombre en el mensaje    
    str_Devolucion = Replace(str_Devolucion,lbl_Nombre, _
                                       str_Nombre)
    'Ponemos los apellidos en el mensaje
    str_Devolucion = Replace(str_Devolucion,lbl_Apellidos, _
                                       str_Apellidos)
    'Ponemos el correo antiguo en el mensaje
    str_Devolucion = Replace(str_Devolucion,lbl_EmailViejo, _
                                       str_Vieja)
    'Ponemos el nuevo correo en el mensaje
    str_Devolucion = Replace(str_Devolucion,lbl_EmailNuevo, _
                                       str_Nuevo)
                                       
    'Si hay que incrustar un imagen
    If Len(Trim(str_IMG)) > 0 Then
    
        'Creamos un objeto FileSystemObject
        Set obj_FS = CreateObject("Scripting.FileSystemObject")
        
        'Obtenemos el nombre del archivo, para usarlo
        'como referencia en el HTML
        str_RefIMG = obj_FS.GetFileName(str_IMG)

        'Ponemos el nombre del fichero de imagen en el mensaje,
        str_Devolucion = Replace(str_Devolucion, _
                                 lbl_IMG, _
                                 str_RefIMG)
                                           
       'Eliminamos el objeto FileSystem
       Set obj_FS = Nothing
    
    End If
    
    'Se produce la devolución de la función con el código HTML
    'generado
    f_HTML = str_Devolucion

End Function 'f_HTML

Function f_NombreLog(str_Log) 'As String
'***********************************************************************
'* Procedimiento: f_NombreLog                                          *
'* Tipo         : Función                                              *
'* Devolución   : Cadena                                               *
'* Fecha y Hora : 11/02/2009 10:49:20                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe una ruta y nombre de fichero y   *
'*                devuelve la misma ruta y el fichero renombrado       *
'*                añadiéndole al final del nombre, antes de la         *
'*                extensión, la fecha y hora en formato YYYYMMDD-HHMM  *
'***********************************************************************

    Dim obj_FS
    Dim dth_Ahora
    
    'Obtenemos la fecha y la hora
    dth_Ahora = Now
    
    Set obj_FS = CreateObject("Scripting.FileSystemObject")

    f_NombreLog = obj_FS.GetParentFolderName(str_Log) & "\" & _
                  obj_FS.GetBaseName(str_Log) & "-" & _
                  Year(dth_Ahora) & _
                  Right("00" & Month(dth_Ahora),2) & _
                  Right("00" & Day(dth_Ahora),2) & "-" & _
                  Right("00" & Hour(dth_Ahora),2) & _
                  Right("00" & Minute(dth_Ahora),2) & _
                  "." & obj_FS.GetExtensionName(str_Log)
    
    Set obj_FS = Nothing

End Function 'f_NombreLog

 

 

2 comentarios to “Script VBScript Para Enviar Correos De Aviso De Cambio De Dirección (disclaimer)”

  1. […] Script VBScript Para Enviar Correos De Aviso De Cambio De Dirección (disclaimer) […]

  2. Claro said

    Lo primero muchas gracias por tus publicaciones, en especial esta que me ha venido como anillo al dedo, ya que to estoy justo en la situación que describes y andaba buscando exactamente esto.
    El caso es que como fichero de remitentes estoy utilizando el log que me genera exchange cambiando la extension a .tab y eliminando las primeras lineas para que los encabezados esten en la linea 1 pero recibo este error en la linea 1646:

    Microsoft OLE DB Provider for ODBC Drivers: [Micro
    soft][Controlador ODBC Texto] Pocos parámetros. Se esperaba 2.

    ¿puedes echarme una mano?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: