Colabora
 

Correo con Visual Basic 2005

Envío de Correo Masivo Utilizando una Base de Datos Microsoft Access 2003

 

Fecha: 12/Ago/2007 (11 de Agosto de 2007)
Autor: Giovanni Cuadra  - giovanni_cuadra@hotmail.com
Nicasoft logo
!!!Tecnología de la Programación!!!

 


Introducción

Es indudable que Visual Basic 2005 modela capacidades extraordinarias en el desarrollo de aplicaciones RAD. No hay nada que envidiarle a ningún lenguaje de programación en la actualidad para querer desarrollar lo que se nos ocurra de una forma rápida, simplificada y bien estructurada.

Es indudable que las mejoras desarrolladas en Netframework 2.0 y en sus anteriores versiones por Microsoft pueden llegar hacer incontables ya que proporciona medios que permiten de una u otra forma desarrollar la solución de manera inmediata. Proporcionando mecanismos que en otras épocas serían engorrosos, complejos y con altos costos de desarrollo.

Este artículo esta basado en una consulta hecha por un buen amigo, el cual me comentaba como se podría encontrar una manera de enviar correo electrónico masivamente desde Visual Basic 2005 utilizando una base de datos de correos almacenada en Microsoft Access, o en alguna otra versión de .NET de Visual Basic.

El envió de correo electrónico desde Visual Basic .NET es posible mediante el uso de algunos espacios de nombres y referencias a librerías que proporciona el mismo lenguaje de programación. Su uso es extenso ya que permite no solo enviar el correo, que es en si el texto, si no también archivos adjuntos, copias y un sin número de cosas que son proporcionadas por los diferentes programas de correos electrónicos como por ejemplo Outlook Express de Microsoft o similares.

Pero el hecho se encuentra en el envió de correo a diferentes destinatarios utilizando mecanismos propios de Visual Basic y que permita enviarlos con un solo clic el mismo contenido del correo, cambiando solamente un par de cosas dentro del mismo.

Primeros Pasos

En el menú archivo de Visual Studio 2005 hacer clic en nuevo y después en  proyecto. Luego en el asistente de plantillas de formularios Windows, hacer clic en el icono de aplicaciones de Windows, ubicar el directorio de la aplicación en el lugar donde se desee. A continuación se muestran las opción de menú y el formulario de las plantillas:

Figura 1

Figura 1.0 Crear un proyecto Windows.

Figura 2

Figura 2.0 Seleccionar plantilla aplicaciones de Windows.

Figura 3

Figura 3.0 Describir nombre de la solución y su ubicación.

Posterior a los pasos descritos anteriormente es necesario agregar las referencias de System.Managament y System.ServiceProcess dentro del proyecto, para agregar las referencias hacer clic en el menú proyecto de Visual Studio 2005 y luego seleccionar agregar referencias, se mostrara a continuación un cuadro de dialogo listando todas las referencias de .NET 2.0, posteriormente ubicar en orden alfabético las referencias anteriormente descritas y agregarlas.

A continuación se muestra el contenido del proyecto denominado winAppSendMail:

Figura 4

Figura 4.0 Contenido del proyecto Windows.

 

La clase clsDatabase.vb: posee un método para ubicar la base de datos en su directorio correspondiente.

El modulo publico VarPublic.vb: Posee una variable de ámbito global la cual permite en tiempo de ejecución enviar la información de conexión al objeto del mismo tipo.

La carpeta Database contiene la base de datos en formato Access 2003, la carpeta Forms contiene el formulario de la aplicación

Implementando una solución con Microsoft Visual Basic 2005

A continuación detallo los requerimientos necesarios para crear el proyecto, desarrollado en VB 2005, Edición Profesional:

  • Microsoft Access 2003 para crear la base de datos.

  • Microsoft Visual Studio 2005

  • Microsoft Windows Xp SP 2.0

  • Computadora Petium o superior.

  • Memoria RAM 128 o superior.

  • Monitor de 15'' o superior.

El código

A continuación muestro la sección del código, el cual se describe los espacios de nombres , los objetos de ADO.NET para acceder a la base de datos y la técnica que se utiliza en el vio masivo de correos mediante un ciclo iterativo con la base de datos.

Imports System.Data
Imports System.IO
Imports System.Text
Imports System.Web.Mail
Imports System.Data.OleDb
Imports System.Management
Imports System.ServiceProcess
Public Class frmMain
 Dim mailMsg As New MailMessage()
 Private Sub btnCerrar_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnCerrar.Click
  Me.Close()
  Application.Exit()
 End Sub

 Private Sub btnSendMail_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnSendMail.Click

  Try

   Windows.Forms.Cursor.Current = Cursors.WaitCursor

   '--Protocolo de correo saliente. Cambiarlo según la configuración del Proveedor de Internet.
   SmtpMail.SmtpServer = "nicasoft.com.ni"

   Dim cntDB As New OleDbConnection(strConAccess)
   cntDB.Open()

   Dim SQLMail As String = "SELECT * FROM tblMail"
   Dim cmdMail As New OleDbCommand(SQLMail, cntDB)
   Dim rdMail As OleDbDataReader = cmdMail.ExecuteReader

   While rdMail.Read

 Dim strMensaje As String = Me.rchtxtMail.Text
 Dim srtCuenta As String = "Usuario: " & rdMail.Item("username") & vbCrLf & _
 "Clave: " & rdMail.Item("password")

 With mailMsg
  .From = Me.txtFrom.Text.Trim
  .To = rdMail.Item("mail")
  .Subject = Me.txtSubject.Text.Trim
  .Body = strMensaje.Replace("@CUENTA_APP", srtCuenta)
  .Priority = MailPriority.Normal
 End With

 SmtpMail.Send(mailMsg)

   End While

   MsgBox("Los correos fueron enviados a sus respectivos destinatarios." & _
            " Haga clic en el boton cerrar.", _
   MsgBoxStyle.Information, My.Application.Info.Title)

   Windows.Forms.Cursor.Current = Cursors.Default

   rdMail.Close()
   cntDB.Close()

  Catch ex As Exception
   Windows.Forms.Cursor.Current = Cursors.Default
   MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
  End Try

 End Sub
End Class

Como trabaja el código

El proceso de la aplicación es simple se abre una conexión a la base de datos, se itera una tabla de la misma y luego en cada iteración procesa y lee el correo electrónico y lo que se desea enviar a cada uno de ellos, la propiedad Body contiene el contenido del correo, se utiliza la función Replace para cambiar en tiempo de ejecución una parte del contenido del texto a enviar, que en este caso es que cada usuario se le enviara su correspondiente cuenta de acceso y clave a una aplicación como por ejemplo. En otras palabras esta función busca y reemplaza un fragmento de texto dentro de una cadena en particular. Luego el método Send permite enviar el contenido del correo a la cuenta del destinatario correspondiente.

 

Conclusiones

Este es un excelente método para enviar correo electrónico a múltiples clientes informándoles de los nuevos servicios, productos u otros elementos. Este es un método que se describe como envió de correo electrónico personalizado sin utilizar ningún ambiente de software de correo de terceros, simplemente un pequeño programa en Visual Basic 2005 y una base de datos de Microsoft Access 2003. Como se observa es posible anexar o cambiar cualquier parte del mensaje del correo electrónico en tiempo de ejecución proporcionándole un alto nivel de versatilidad a los mismos.

Para contactarnos puedes visitar nuestro sitio oficial : www.nicasoft.com.ni


Espacios de nombres usados en el código de este artículo:

Imports System.Data
Imports System.IO
Imports System.Text
Imports System.Web.Mail
Imports System.Data.OleDb
Imports System.Management
Imports System.ServiceProcess

 


Código de ejemplo (comprimido):

 

Fichero con el código de ejemplo: gcuadra_winAppSendEmail.zip - 43.0 KB

(MD5 checksum: (C9AA7FA558539858AB7BAED488080E4F)

 


Ir al índice principal de el Guille