Hola a todos, estoy desarrollando un programa para enviar correos electronicos a diferentes destinatarios, pero tengo un problema y es que los correos que envio desde mi aplicacion no llegan a las direcciones ni de yahoo ni de hotmail, pero si llegan a direcciones de mi universidad. Estoy utilizando la version libre de PostCast Server V2.6.0 para utilizar mi computador como servidor de correo SMTP, no se si el problema estara en ese programa, si saben de otro programa similar a este les agradesco me ayuden, aqui adjunto el codigo de mi aplicacion que aun no esta terminada pero funciona,
Muchas gracias por su ayuda,
Daniel Loaiza Palacio
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
System.Net;
using
System.Net.Mail;
using
System.Net.Mime;
using
System.Threading;
using
System.IO;
namespace
CorreoMasivo
{
public partial class Correo : Form
{
//Nombre para el archivo donde se guardara la lista de contactos
private string nombreFichero;
//Objeto que guarda las especificaciones des e-mail
private MailMessage mail;
//Objeto que guarda los archivos adjuntos
private Attachment data;
//String que guarda la ruta de un archivo a adjuntar
private string ruta;
//Arreglo de strings para almacenar las rutas de los archivos adjuntos
private string[] rutas;
//Contador de archivos adjuntos
private int contadorArchivosAdjuntos;
//Constructora
public Correo()
{
InitializeComponent();
nombreFichero =
"Sintitulo";
mensaje.Clear();
this.Text = nombreFichero;
mail =
new MailMessage();
contadorArchivosAdjuntos = 0;
rutas =
new string[4];
}
//Boton para salir de la aplicacion
private void mSalir_Click(object sender, EventArgs e)
{
Application.Exit();
}
//Boton para crear un nuevo mensaje, borra todos los campos de la aplicacion
private void mNuevo_Click(object sender, EventArgs e)
{
mail =
new MailMessage();
nombreFichero =
"Sintitulo";
mensaje.Clear();
tbRemitenteNombre.Clear();
tbRemitenteCorreo.Clear();
tAdjuntar.Clear();
lblerror.Clear();
textoI.Clear();
textoD.Clear();
tbAsunto.Clear();
//falta borrar las listas de correos
/*foreach
lbNoEnviar.*/
this.Text = nombreFichero;
}
//Boton para abrir un mensaje guardado
private void mAbrir_Click(object sender, EventArgs e)
{
if (dlgAbrir.ShowDialog() == DialogResult.OK)
{
nombreFichero = dlgAbrir.FileName;
mensaje.LoadFile(nombreFichero);
this.Text = nombreFichero;
}
}
//Boton para guardar un mensaje escrito
private void mGuardar_Click(object sender, EventArgs e)
{
if (dlgGuardar.ShowDialog() == DialogResult.OK)
{
nombreFichero = dlgGuardar.FileName;
mensaje.SaveFile(nombreFichero);
this.Text = nombreFichero;
}
}
//Estos eran botones para el editor de texto, no se utilizaran
/*
private void mFuente_Click(object sender, EventArgs e)
{
if (dlgFuente.ShowDialog() == DialogResult.OK)
{
mensaje.Font = dlgFuente.Font;
mensaje.ForeColor = dlgFuente.Color;
}
}
private void mColorFondo_Click(object sender, EventArgs e)
{
if (dlgColor.ShowDialog() == DialogResult.OK)
{
mensaje.BackColor = dlgColor.Color;
}
}
*/
//Funcion para mandar los mails
public void sendMail()
{
//Toma los datos del remitente
mail.From =
new MailAddress(tbRemitenteCorreo.Text, tbRemitenteNombre.Text);
//Recoge todos los correos a enviar y los pone en un array
ListBox.ObjectCollection arrayObjetos = lbEnviar.Items;
//j es un contador para el ciclo de enviar los correos a cada destinatario
int j = 0;
foreach (object i in arrayObjetos)
{
//Adiciona la dirrecion de cada contacto para mandarle el correo
mail.To.Add(arrayObjetos[j].ToString());
//incrementa en contador
j++;
//Toma el asunto del correo y lo pone en el objeto mail.
mail.Subject = tbAsunto.Text;
//Toma el texto del correo y lo adiciona al mensaje.
mail.Body = mensaje.Text;
//especifica que el cuerpo del mensaje esta en formato HTML
mail.IsBodyHtml =
true;
//Especifica el nombre del servidor SMTP
SmtpClient smtpServer =
new SmtpClient("DANIEL-F4ADAC25");
//lblerror.Text += "aqui bien";
//Manda el e-mail y captura la excepcion si hay un error de envio
try
{
smtpServer.Send(mail);
lblerror.Text = j +
" Mesanjes " + "enviados satisfactoriamente!!!";
}
catch (Exception e)
{
lblerror.Text +=
" ERROR: " + e.Message;
}
//Borra el destinatario del mensaje anterior para poner el nuevo destinatario de correo
mail.To.Clear();
}
}
//Boton para enviar el mensaje
private void btnEnviar_Click(object sender, EventArgs e)
{
lblerror.Text =
"Enviando....";
sendMail();
}
//Boton para adjuntar las fotos
private void btnAdjuntar_Click(object sender, EventArgs e)
{
//String que guarda el nombre del fichero
string nombreFichero;
//ventana de dialogo para escoger el archivo a adjuntar
OpenFileDialog dlg =
new OpenFileDialog();
dlg.Title =
"Adjuntar";
if (dlg.ShowDialog() == DialogResult.OK)
nombreFichero = dlg.FileName;
//Captura la ruta del archivo en el string ruta
ruta =
Path.GetFullPath(dlg.FileName);
//Llama a la funcion Attachment para adjuntar la foto en el e-mail
Attachment(ruta);
//Almacena las rutas de los archivos para las imagenes embebidas
rutas[contadorArchivosAdjuntos] = ArreglarRuta(ruta);
//incrementa el contador de archivos adjuntos
contadorArchivosAdjuntos++;
//Inserta un backSlash en las rutas para poder embeber las imagenes
string rutabuena = ArreglarRuta(ruta);
tAdjuntar.Text += ArreglarRuta(ruta);
imagenesEmbebidas();
}
//Funcion para arreglar las rutas insertando backslashes
string ArreglarRuta(string stringToSplit)
{
//string a develver
string b = "";
//backSlash a insertar
char backSlash = (char)92;
//ciclo para insertar un backSlash donde se necesite
for (int i = 0; i < stringToSplit.Length ; i++)
{
if (stringToSplit[i] == backSlash)
{
b += backSlash;
b += backSlash;
}
else
{
b += stringToSplit[i];
}
}
return b;
}
//Funcion para adjuntar los archivos en el e-mail
public void Attachment(string file)
{
// Create the file attachment for this e-mail message.
data =
new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.
File.GetCreationTime(file);
disposition.ModificationDate = System.IO.
File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.
File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
mail.Attachments.Add(data);
}
public void imagenesEmbebidas()
{
//Vista alternativa de texto plano para el e-mail
//first we create the Plain Text part
AlternateView plainView = AlternateView.CreateAlternateViewFromString(mensaje.Text,
null, "text/plain");
if (contadorArchivosAdjuntos == 1)
{
string mensajeHTML;
mensajeHTML = mensaje.Text;
mensajeHTML +=
"<img src=cid:companylogo>";
//Vista alternativa en formato HTML
//then we create the Html part
//to embed images, we need to use the prefix 'cid' in the img src value
//the cid value will map to the Content-Id of a Linked resource.
//thus <img src='cid:companylogo'> will map to a LinkedResource with a ContentId of 'companylogo'
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(mensajeHTML,
null, "text/html");
//create the LinkedResource (embedded image)
LinkedResource logo =
new LinkedResource(rutas[0]);
logo.ContentId =
"companylogo";
//add the LinkedResource to the appropriate view
htmlView.LinkedResources.Add(logo);
mail.AlternateViews.Add(htmlView);
}
//add the views
mail.AlternateViews.Add(plainView);
}
private void btnAnadirI_Click(object sender, EventArgs e)
{
lbNoEnviar.Items.Add(textoI.Text);
textoI.Clear();
textoI.Focus();
}
private void btnD_Click(object sender, EventArgs e)
{
try
{
lbEnviar.Items.Add(lbNoEnviar.SelectedItem);
}
catch (Exception excepcion) {
MessageBox.Show(
"Hay que introducir direcciones en la lista o abrir una lista existente", "Error al intrucucir direcciones", MessageBoxButtons.OK, MessageBoxIcon.Error);
};
}
private void btnDD_Click(object sender, EventArgs e)
{
ListBox.ObjectCollection arrayObjetos = lbNoEnviar.Items;
ListBox.ObjectCollection arrayObjetos2 = lbEnviar.Items;
bool copiar = true;
int i;
try
{
// foreach (object i in arrayObjetos)
// {
for (i = 0; i < lbEnviar.Items.Count; i++)
{
for (int j = 0; j < lbNoEnviar.Items.Count; j++)
{
if (arrayObjetos[i].ToString().Equals(arrayObjetos2[j].ToString()))
copiar =
false;
}
if (copiar)
lbEnviar.Items.Add(arrayObjetos[i]);
copiar =
true;
}
//}
}
catch (Exception excepcion)
{
MessageBox.Show(
"Hay que introducir direcciones en la lista o abrir una lista existente", "Error al intrucucir direcciones", MessageBoxButtons.OK, MessageBoxIcon.Error);
};
}
private void btnBorrarI_Click(object sender, EventArgs e)
{
lbNoEnviar.Items.Remove(lbNoEnviar.SelectedItem);
}
private void btnBorrarD_Click(object sender, EventArgs e)
{
lbEnviar.Items.Remove(lbEnviar.SelectedItem);
}
private void mNuevaLista_Click(object sender, EventArgs e)
{
lbNoEnviar.Items.Clear();
lbEnviar.Items.Clear();
}
private void mAbrirLista_Click(object sender, EventArgs e)
{
if (dlgAbrirLista.ShowDialog() == DialogResult.OK)
{
nombreFichero = dlgAbrirLista.FileName;
mensaje.LoadFile(nombreFichero);
this.Text = nombreFichero;
lbNoEnviar.Items.Clear();
lbEnviar.Items.Clear();
string lista = mensaje.Text;
int j = 0;
int contador;
for (contador = lista.Length - 1; contador != 0; contador--)
{
if (lista[contador] == ' ' && contador != lista.Length - 1)
{
lbNoEnviar.Items.Add(lista.Substring(contador + 1, j));
j = 0;
}
j++;
}
lbNoEnviar.Items.Add(lista.Substring(contador, j));
mensaje.Clear();
}
}
private void mGuardarLista_Click(object sender, EventArgs e)
{
if (dlgGuardarLista.ShowDialog() == DialogResult.OK)
{
mensaje.Clear();
nombreFichero = dlgGuardarLista.FileName;
ListBox.ObjectCollection arrayObjetos = lbNoEnviar.Items;
for (int i = 0; i < arrayObjetos.Count; i++)
{
mensaje.Text += arrayObjetos[i];
mensaje.Text +=
' ';
}
mensaje.SaveFile(nombreFichero);
this.Text = nombreFichero;
}
mensaje.Clear();
}
private void btnAnadirD_Click(object sender, EventArgs e)
{
lbEnviar.Items.Add(textoD.Text);
textoI.Clear();
textoI.Focus();
}
}
}