Enviando Correo con VB
Para enviar un correo en VB se deben importar los siguientes espacios de nombres:
Imports System.Net.Mail
Imports System.Net
a continuación crearemos un formulario como el que se muestra en la figura, donde en el GroupBox con texto Correo Remitente se pondrá la información del SMTP, dirección de correo electrónico y respectiva contraseña de la persona que envía el correo, mientras en el GroupBox con texto Correo destinatario va la información de la persona(s) que recibirá(n) el correo y la información que se mandará :
Mandar un correo en breve es hacer dos cosas, preparar el correo con las direcciones remitente, destino, CC, BCC, archivos adjuntos, asunto, tipo de codifcacion, etc y por otro lado preparar el SMTPClient por eso se especifican las variables correo y Servidor, correo toma los valores de Usuario y A, como ambos son direcciones de correo se especifican como New MailAddress:
Dim Usuario As String = TxtUsuario.Text
Dim A As String = txtA.Text
Dim
Remitente As MailAddress
= New MailAddress(Usuario)
Dim
Destinatario As MailAddress
= New MailAddress(A)
Dim
correo As New
Mail.MailMessage(Remitente, Destinatario)
Dim
Servidor As New
Mail.SmtpClient
Ahora, en este ejemplo para no andar especificando el puerto ni el protocolo de mensajería(SMTP), lo que se creo en el formulario fue un ComboBox con las opciones de correo a los que la aplicación puede mandar mensajes, tal como se muestra a continuación con el respectivo código en el evento Load del formulario:
TxtCorreo.Items.Add("Direccion
correo Hotmail")
TxtCorreo.Items.Add("Direccion
correo Gmail")
TxtCorreo.Items.Add("Direccion
correo Yahoo")
TxtCorreo.Items.Add("Direccion
Correo Empresarial")
TxtCorreo.DropDownStyle = ComboBoxStyle.DropDownList
Dim SMTP As String
Dim Puerto As Integer = 25
Dim sec As String
TxtCorreo es el ComboBox que da la opción de escoger a que SMTPClient se mandará el correo, lo que haré para tomar estos valores y saber asignar correctamente los valores a SMTP y sec será capturar el valor del ComboBox(TxtCorreo) y utilizar un IF para ir comparando con valores que pueda tomar el ComboBox:
Dim tipo As String = Convert.ToString(TxtCorreo.Text)
If tipo
= "Direccion correo Hotmail" Then
SMTP = "SMTP.live.com"
sec = "true"
ElseIf
tipo = "Direccion correo Gmail" Then
SMTP = "SMTP.gmail.com"
sec = "true"
ElseIf
tipo = "Direccion correo Yahoo" Then
SMTP = "smtp.mail.yahoo.com"
sec = "false"
ElseIf tipo = "Direccion Correo
Empresarial" Then
SMTP = "127.0.0.1"
sec = "true"
End If
Listo, otra indicación seria el como adjuntar un archivo, esta es la parte del formulario que se encarga de eso:
Para adjuntar hago uso de esta variable:
Dim
attachment As OpenFileDialog
= New OpenFileDialog()
le especifico un filtro y un textbox que mostrará la ruta del archivo adjunto
attachment.Filter
= "All Files(*.*)|*.*"
TxtAdjunto.ReadOnly
= True
en el evento click del botón se tendría este código:
Private
Sub BExaminar_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
BExaminar.Click
If
attachment.ShowDialog = Windows.Forms.DialogResult.OK
Then
TxtAdjunto.Text =
attachment.FileName
End If
End Sub
Tambien notar que algunos correos pueden tener o no CC, BCC y archivos adjuntos por lo que se debe indicar al momento de mandar el correo, esta parte del codigo es así:
1. Tomar los valores en los textbox correspondientes a CC y BCC y verifico no esten vacios.
2. en caso de no estarlo creo la nueva direccion de correo
3. para el archivo adjunto en caso de existir un Filename es que se ha escogido un archivo, entonces lo adjunto al correo
Dim
CopiaCarbon As String
= TxtCC.Text
Dim
BCopiaCarbon As String
= TxtBCC.Text
If
Not CopiaCarbon Is
Nothing And
CopiaCarbon <> vbNullString Then
correo.Bcc.Add(New MailAddress(BCopiaCarbon))
End
If
If
Not CopiaCarbon Is
Nothing And
BCopiaCarbon <> vbNullString Then
correo.Bcc.Add(New MailAddress(BCopiaCarbon))
End
If
If
attachment.FileName.Length > 0 Then
correo.Attachments.Add(New Attachment(attachment.FileName))
End If
End With
por ultimo el nombre de cada textbox y el código para mandar el correo desde VB...el ComboBox se llama TxtCorreo y el de adjuntar archivos es TxtAdjunto, ambos no admiten se escriba sobre ellos.
Imports
System.Net.Mail
Imports
System.Net
Imports
System.IO
Public
Class Form1
Dim SMTP As String
Dim Puerto As Integer = 25
Dim sec As String
Dim
attachment As OpenFileDialog
= New OpenFileDialog()
Private Sub Form1_Load(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
MyBase.Load
TxtCorreo.Items.Add("Direccion
correo Hotmail")
TxtCorreo.Items.Add("Direccion correo
Gmail")
TxtCorreo.Items.Add("Direccion correo
Yahoo")
TxtCorreo.Items.Add("Direccion Correo
Empresarial")
TxtCorreo.DropDownStyle = ComboBoxStyle.DropDownList
attachment.Filter = "All
Files(*.*)|*.*"
TxtAdjunto.ReadOnly = True
End Sub
Private Sub
BExaminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
BExaminar.Click
If attachment.ShowDialog = Windows.Forms.DialogResult.OK Then
TxtAdjunto.Text = attachment.FileName
End If
End Sub
Private Sub
BCorreo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
BCorreo.Click
Dim Usuario As String = TxtUsuario.Text
Dim Contraseña As String = TxtContraseña.Text
Dim A As String = txtA.Text
Dim Contenido As String = txtContenido.Text.Trim() & vbCrLf
Dim Asunto As String = txtAsunto.Text
Dim Remitente As MailAddress = New MailAddress(Usuario)
Dim Destinatario As MailAddress = New MailAddress(A)
Dim CopiaCarbon As String = TxtCC.Text
Dim BCopiaCarbon As String = TxtBCC.Text
Dim tipo As String = Convert.ToString(TxtCorreo.Text)
If tipo = "Direccion
correo Hotmail" Then
SMTP = "SMTP.live.com"
sec = "true"
ElseIf tipo = "Direccion
correo Gmail" Then
SMTP = "SMTP.gmail.com"
sec = "true"
ElseIf tipo = "Direccion
correo Yahoo" Then
SMTP = "smtp.mail.yahoo.com"
sec = "false"
ElseIf tipo = "Direccion
Correo Empresarial" Then
SMTP = "127.0.0.1"
sec = "true"
End If
Try
Dim correo As New Mail.MailMessage(Remitente,
Destinatario)
Dim Servidor As New Mail.SmtpClient
With correo
'aqui puedo agregar mas destinatarios, se debe
borrar Remitente y destinatario y modificar
' la declaracion de correo y ademas dejar
codigo asi: Dim correo As New Mail.MailMessage()
'.From = New Mail.MailAddress(Usuario)
'.To.Add(New
MailAddress(A))
'.To = New Mail.MailAddress(A) aqui solo especifica un destinatario con Add
se agregan mas.
'por ejemplo
'.To.Add(New MailAddress(A1))
'.To.Add(New MailAddress(A2))
'.To.Add(New MailAddress(A3))
.Subject = Asunto
.Body = Contenido
.BodyEncoding = System.Text.Encoding.UTF8
.IsBodyHtml = False
.Priority = MailPriority.Normal
If Not
CopiaCarbon Is Nothing
And CopiaCarbon <> vbNullString Then
.Bcc.Add(New MailAddress(BCopiaCarbon))
End If
If Not
CopiaCarbon Is Nothing
And BCopiaCarbon <> vbNullString Then
.Bcc.Add(New MailAddress(BCopiaCarbon))
End If
If attachment.FileName.Length > 0 Then
.Attachments.Add(New Attachment(attachment.FileName))
End If
End With
With Servidor
.Host = SMTP
.Port = Puerto
.EnableSsl = sec
.Credentials = New System.Net.NetworkCredential(Usuario, Contraseña)
.Send(correo)
End With
MessageBox.Show("Correo
enviado!", "Correo", MessageBoxButtons.OK)
Catch
MessageBox.Show("Correo
no se envio !", "Correo",
MessageBoxButtons.OK)
End Try
End Sub
End Class
y el mismo formulario solo que esta vez con C#
using
Microsoft.VisualBasic;
using
System;
using
System.Collections;
using
System.Collections.Generic;
using
System.Data;
using
System.Diagnostics;
using
System.Net.Mail;
using
System.Net;
using
System.IO;
using
System.Windows.Forms;
public
class Form1
{
string
SMTP;
int Puerto
= 25;
string sec;
OpenFileDialog
attachment = new OpenFileDialog();
private void Form1_Load(System.Object
sender, System.EventArgs e)
{
TxtCorreo.Items.Add("Direccion correo Hotmail");
TxtCorreo.Items.Add("Direccion correo Gmail");
TxtCorreo.Items.Add("Direccion
correo Yahoo");
TxtCorreo.Items.Add("Direccion Correo
Empresarial");
TxtCorreo.DropDownStyle
= ComboBoxStyle.DropDownList;
attachment.Filter = "All Files(*.*)|*.*";
TxtAdjunto.ReadOnly = true;
}
private void BExaminar_Click(System.Object
sender, System.EventArgs e)
{
if
(attachment.ShowDialog == System.Windows.Forms.DialogResult.OK)
{
TxtAdjunto.Text =
attachment.FileName;
}
}
private void BCorreo_Click(System.Object
sender, System.EventArgs e)
{
string
Usuario = TxtUsuario.Text;
string
Contraseña = TxtContraseña.Text;
string
A = txtA.Text;
string
Contenido = txtContenido.Text.Trim() + Constants.vbCrLf;
string
Asunto = txtAsunto.Text;
MailAddress
Remitente = new MailAddress(Usuario);
MailAddress
Destinatario = new MailAddress(A);
string
CopiaCarbon = TxtCC.Text;
string
BCopiaCarbon = TxtBCC.Text;
string
tipo = Convert.ToString(TxtCorreo.Text);
if
(tipo == "Direccion correo Hotmail")
{
SMTP = "SMTP.live.com";
sec = "true";
}
else if (tipo == "Direccion
correo Gmail")
{
SMTP = "SMTP.gmail.com";
sec = "true";
}
else if (tipo == "Direccion
correo Yahoo")
{
SMTP = "smtp.mail.yahoo.com";
sec = "false";
}
else if (tipo == "Direccion Correo Empresarial")
{
SMTP = "127.0.0.1";
sec = "true";
}
try
{
System.Net.Mail.MailMessage correo = new
System.Net.Mail.MailMessage(Remitente,
Destinatario);
System.Net.Mail.SmtpClient Servidor = new
System.Net.Mail.SmtpClient();
var _with1 = correo;
//aqui puedo agregar mas destinatarios, se debe borrar
Remitente y destinatario y modificar
// la declaracion de correo y ademas dejar codigo asi: Dim
correo As New Mail.MailMessage()
//.From = New Mail.MailAddress(Usuario)
//.To.Add(New
MailAddress(A))
//.To = New Mail.MailAddress(A) aqui solo especifica un destinatario con Add
se agregan mas.
//por ejemplo
//.To.Add(New
MailAddress(A1))
//.To.Add(New
MailAddress(A2))
//.To.Add(New
MailAddress(A3))
_with1.Subject = Asunto;
_with1.Body = Contenido;
_with1.BodyEncoding = System.Text.Encoding.UTF8;
_with1.IsBodyHtml = false;
_with1.Priority = MailPriority.Normal;
if ((CopiaCarbon != null)
& CopiaCarbon != Constants.vbNullString)
{
_with1.Bcc.Add(new MailAddress(BCopiaCarbon));
}
if
((CopiaCarbon != null) & BCopiaCarbon !=
Constants.vbNullString)
{
_with1.Bcc.Add(new MailAddress(BCopiaCarbon));
}
if
(attachment.FileName.Length > 0)
{
_with1.Attachments.Add(new Attachment(attachment.FileName));
}
var
_with2 = Servidor;
_with2.Host = SMTP;
_with2.Port = Puerto;
_with2.EnableSsl = sec;
_with2.Credentials = new System.Net.NetworkCredential(Usuario,
Contraseña);
_with2.Send(correo);
MessageBox.Show("Correo enviado!", "Correo", MessageBoxButtons.OK);
}
catch
{
MessageBox.Show("Correo no se envio !", "Correo", MessageBoxButtons.OK);
}
}
public
Form1()
{
Load += Form1_Load;
}
}