Problema con envio de e-mails

tema enviado por dloaizap en C#
tema iniciado el 10/06/2006

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();

}

}

}