Los correos con ASP se suelen enviar con el objeto CDONTS, que esta presente en la mayoría de los servidores Microsoft.
Este objeto es realmente sencillo aunque puede dar problemas si lo queremos utilizar de una forma relativamente profesional, debido a los problemas que tiene al introducir archivos dentro del cuerpo del mensaje. Como se verá a continuación.
para utilizarlo, primero se debe crear el objeto correo:
Set ObjetoCorreo = CreateObject("CDONTS.NewMail")
Luego se establecen sus propiedades y métodos, que vemos abajo, se envía (método Send) y después se debe destruir la variable de la siguiente forma:
Set ObjetoCorreo = Nothing
Propiedades:
From
Este campo se debe rellenar para que el mensaje sea enviado correctamente.
Se pone quién esta enviando el mensaje, por ejemplo:
ObjetoCorreo.From = "mcanam@mcanam.com"
Recordar la sintaxis para que aparezca el nombre en vez de la dirección de correo:
ObjetoCorreo.From = "Webmaster de McAnam<webmaster@mcanam.com>"
To
A quién se le envía el correo, ejemplos:
ObjetoCorreo.To = "Webmaster de McAnam<webmaster@mcanam.com>"
ó
ObjetoCorreo.To = "mcanam@mcanam.com"
También se puede enviar a varias personas separándolas por punto y coma:
ObjetoCorreo.To = "Webmaster de McAnam<webmaster@mcanam.com>;mcanam@mcanam.com"
Cc
Para enviar una copia a otra dirección de correo, ejemplos:
ObjetoCorreo.Cc = "Pedro García<pgarcia@mcanam.com>"
ó
ObjetoCorreo.Cc = "mcanam@mcanam.com;pgarcia@mcanam.com;Juan López<jlopez@mcanam.com>"
Bcc
Igual que el anterior, pero las personas a las que envias el correo, no sabrán a quien mas le has enviado el mensaje, ejemplo:
Establece una dirección como la predefinida como raíz para un texto en HTML. Por ejemplo si ponemos:
ObjetoCorreo.ContentBase = "http://www.mcanam.com/imagenes/" y después en el cuerpo del body en HTML ponemos:
<img src="logo2.gif">
Mostraría la imagen:
ContentLocation
Hace la misma función que ContentBase.
Teóricamente si ponemos algo como esto:
En el HTML del body seria como si estuviésemos en la carpeta 'imagenes' cogiendo de raíz mcanam.com; así para mostrar la imagen del logo tendríamos dos formas:
<img src="logo2.gif"> ó
<img src="/imagenes/logo2.gif">
También puede ir solo, entonces funcionaría como ContentBase, ejemplo:
NOTA: Esta propiedad no ha funcionado correctamente en nuestras pruebas con diferentes aplicaciones de correo
Importance
La importancia que tiene el correo mandado, tiene tres posibles valores:
0 Poco importante
1 Importancia normal (por defecto)
2 Urgente
MailFormat
Como irá encriptado el correo. Tiene dos opciones:
0 El correo va encriptado en el formato mime
1 El correo va en texto plano
Para poder enviar correos con HTML esta propiedad debe tener como valor 0
BodyFormat
El formato del cuerpo del mensaje. También tiene dos opciones:
0 El texto va en formato HTML y se presenta como una página web (MailFormat debe estar a 0)
1 El correo va en texto plano
Value
Se utiliza para insertar una cabecera cualquiera. Su sintaxis es la siguiente:
Esto añadiría la cabecera Reply-To(dirección a la que responder) y le pondría el valor Webmaster McAnam<webmaster@mcanam.com>
Para ver las posibles cabeceras a insertar, pincha aquí
Body
El contenido del Body del e-mail.
Esto es lo que al final verá el usuario, si se ha establecido MailFormat y BodyFormat a 0, será HTML, sino texto plano.
Version
Es la única propiedad solo de lectura (no puede ser modificada).
Da la versión instalada en el servidor del objeto CDONTS NewMail
Métodos:
AttachFile
Añade un archivo adjunto al correo. Su sintaxis es la siguiente:
La dirección donde se encuentra el archivo a adjuntar, este archivo debe estar en el servidor, no en el ordenador cliente y la dirección se debe poner en términos absolutos, del tipo:
"D:\wwwroot\imagen.gif"
Si no sabemos la dirección absoluta, podemos usar el Server.MapPath para usar una ruta relativa, así si tuviéramos imagen.gif en la misma carpeta que la página donde ejecutamos este ASP, deberíamos poner:
Server.MapPath("imagen.gif")
Nombre_fichero:
(opcional), el nombre que queramos dar al fichero.
Para luego usarlo en el BODY como HTML (MailFormat y BodyFormat deben tener el valor 0 y la propiedad Encriptación de AttachFile 1), sería algo así:
<img src=Nombre_fichero>
Encriptación:
(opcional), el tipo de encriptación que queramos usar para enviar el archivo:
0: (Por defecto) Se adjuntará con el formato UUEncode
1: Se adjuntará en base 64
Si MailFormat tiene el valor 0 (Para poder enviar HTML), el método AttachFile enviará el archivo por defecto en base64 (1) en vez del formato UUEncode.
Este ejemplo inserta una imagen situada en el directorio raíz del servidor llamándola "imagen.gif" en el formato por defecto UUEncode:
NOTA: Algunas aplicaciones de correo en los que se ha probado no reconocían los archivos cuando eran introducidos en el HTML, si bien todas recibían el archivo adjunto correctamente.
AttachURL
Añade un archivo al correo, la diferencia con AttachFile es que con este se envía adjunto, mientras que con AttachURL se envía dentro de mensaje.
ContentLocation (al menos en nuestras pruebas) debe contener el nombre del archivo que queramos ponerle para que pueda ser llamado desde un HTML en el Body, puede contener subdirecciones antes, ejemplo: imagenes/imagen.gif.
ContentBase realiza la misma función que la propiedad del mismo nombre y su funcionamiento es igual.
El siguiente ejemplo inserta una imagen desde el directorio raíz del servidor llamada imagen.gif que para llamarla se debería poner: <img src=http://:www.nose.com/imagenes/imagen.gif> La encriptación se ha puesto en base64, ya que de lo contrario no la reconocería.
NOTA: Las pruebas realizadas con este método (al igual que con AttachFile) han dado numeroso problemas en diferentes aplicaciones de correo al intentar insertar este en un texto HTML del cuerpo del mensaje, esto se debe a que Microsoft se ha vuelto a saltar los estándares y solo unos pocos servidores han contemplado esta posibilidad
SetLocaleIDs
Sirve para decirle que 'páginas de códigos' se usarán, esto es un numero que le indicará el juego de caracteres que usará. Por lo general se usa el 1252 pero hay otros muchos (1250, 1251, 1253, 1254, 1255, 1256, 1257, 1258, 65000, 65001, 862, 936, 950, ...).
Una buena forma de saber que código elegir, es coger directamente el que usa el servidor. Para saberlo, pon:
Response.Write Session.CodePage
Ejemplo de SetLocaleIDs para establecer el código a 1252:
ObjetoCorreo.SetLocaleIDs 1257
Send
Envía el correo.
ObjetoCorreo.Send From, To, Subject, Body, Importance
Todos estos parámetros son opcionales y funcionan igual que las propiedades del mismo nombre.
Si se repite uno de estos parámetros en las propiedades, se impondrá el método Send excepto en el To, que cogerá los valores de la propiedad y los añadirá a los del método.
Hemos comprobado que en 'To' y 'Subject', si se repiten, no es que anule la propiedad, sino que simplemente pone antes los parámetros del Send (en el caso del To ya con los valores de la propiedad añadidos) y las aplicaciones de correo las cogen, pero no sería sorprendente encontrar algúna aplicación de correo que coja las últimas y por lo tanto aparecer diferente dependiendo la aplicación.
De todas formas es absurdo poner dos Subject, Body, etc por lo que recomendamos utilizar o uno u otro pero no los dos
Debido a los problemas con ContentLocation, ContentBase, AttachFile y AttachURL en lo que a insertar archivos en una página HTML se refiere, para hacer esto, recomendamos utilizar solo uno de los métodos ContentLocation y ContentBase, y a la hora de añadir un archivo con AttachFile o AttachURL, llamarlo como esté en vuestro servidor, así si la aplicación de correo no reconoce estas propiedades lo descargará del servidor (con el inconveniente de que el archivo se habrá descargado dos veces, primero en el mail y luego cuando se descarga).