librerias
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
class clsMail
{
public static bool Enviar()
{
//Ruta de archivo adjunto (Si lo lleva)
string PathFile = @"Z:\archivo.rar";
//Creo el mensaje del mail.
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
//Agrego los destinatarios, pueden ir varios
msg.To.Add("Paraquienvaelcorreo@empresa.com.co");
//Agrego la direccion del que manda el email, puede ser falsa o verdadera, pero si es falsa puede que el servidor de correo lo detecte como spam, tambien depende de las credenciales que se ponen mas abajo
msg.From = new MailAddress("jaas.jaas@gmail.com", "Jaas", System.Text.Encoding.UTF8);
//Pongo el asunto
msg.Subject = "Asunto" ;
//El tipo de codificacion del Asunto
msg.SubjectEncoding = System.Text.Encoding.UTF8;
//Escribo el mensaje Y su codificacion
msg.Body = "Mensaje del correo";
msg.BodyEncoding = System.Text.Encoding.UTF8;
//Especifico si va ha ser interpertado con HTML
msg.IsBodyHtml = false;
//Agrego el archivo que puse en la ruta anterior "PathFile", y su tipo.
Attachment Data = new Attachment(PathFile, MediaTypeNames.Application.Zip );
//Obtengo las propiedades del archivo.
ContentDisposition disposition = Data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(PathFile);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(PathFile);
disposition.ReadDate = System.IO.File.GetLastAccessTime(PathFile);
//Agrego el archivo al mensaje
msg.Attachments.Add(Data);
//Creo un objeto de tipo cliente de correo (Por donde se enviara el correo)
SmtpClient client = new SmtpClient();
//Si no voy a usar credenciales pongo false, Pero la mayoria de servidores exigen las credenciales para evitar el spam
//client.UseDefaultCredentials = false;
//Como voy a utilizar credenciales las pongo
client.Credentials = new System.Net.NetworkCredential("jaas.jaas@gmail.com", "Password");
//Si fuera gmail seria 587 el puerto, si es un servidor outlook casi siempre el puerto 25, yo utilizo un servidor propio de correo
//client.Port = 587;
client.Port = 25;
//identifico el cliente que voy a utilizar
client.Host = "Miservidor.com.co";
//Si fuera a utilizar gmail esto deberia ir en true, esto es un certificado de seguridad
//client.EnableSsl = true;
client.EnableSsl = false;
try
{
//Envio el mensaje
client.Send(msg);
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
return false;
}
}
}
No me funciona me da el siguiente error:
ResponderEliminarError de compilación
Descripción: Error durante la compilación de un recurso requerido para dar servicio a esta solicitud. Revise los detalles de error específicos siguientes y modifique el código fuente en consecuencia.
Mensaje de error del compilador: CS0007: Error de inicialización inesperado de Common Language Runtime - 'Cuota insuficiente para procesar este comando. '
Error de código fuente:
[Líneas de código fuente no relevantes]
Archivo de origen: Línea: 0
Anonimo; el código lo he utilizado en bastantes programas y no he tenido ningún problema, estuve buscando el error que comentas arriba y encontré que el error, que te aparece es posible que no sea del código sino del motor del frame work, creo que lo recomendado es que instales de nuevo el frame work y trates de compilarlo de nuevo
ResponderEliminarhttp://msdn.microsoft.com/es-es/library/4bwh6d2t.aspx .
Espero te funcione.
hola amigo antes que nada gracias por la esta post,me esta sirviendo bastante, ya logre enviar correos atraves del servidor con que cuento pero ahora tengo un detalle que no logro resolver y es el siguiente: cuando intento enviar correos al exterior es decir que no tienen el dominio de mi servidor me marca error,como puedo resolver este problema para que desde mi servidor de correo de outlook pueda mandar correos a otras cuentas por ejemplo de hotmail,gmail,yahoo.etc??
ResponderEliminarQue error te esta saliendo, y en que parte del codigo?, porque tienes que fijarte que para gmail debes utilizar el puerto 587,y el cliente de correo la direccion debe ser "smtp.gmail.com"
ResponderEliminaruna consulta amigo, quizas me pueda ayudar, por ejm yo genero una factura comercial y luego genero un reporte de esta, ahora lo que quiero es que ese reporte se exporte a pdf o excel automaticamente, apenas sea generado y se guarde como un archivo temporal en memoria y se envie automaticamente por correo.
ResponderEliminarGracias,
Brayann, lo que pienso que podes hacer la factura como un reporte de crystal report, este tiene la opción de exportar el reporte a excel o a pdf, este archivo que genere el crystal report, lo puedes guardar en una carpeta temporal y desde hay lo puedes coger para que se envié por email con el código de esta pagina
ResponderEliminarpublic static bool Enviar()
{
//Ruta de archivo adjunto (Si lo lleva)
string PathFile = @"Z:\archivo.rar";<-- Este es el archivo que genera el cristal report
--------------------
Si tienes alguna duda, publica tu código, para poderte ayudar mejor.
Primero Gracias Por Tu Apoyo Y Segundo Tengo Un Problema Me Da Un Error "El certificado remoto no es válido según el procedimiento de validación." Por Favor E Podrias Ayudar?????
ResponderEliminarPon el código con el que te da ese error para poderlo ver.
ResponderEliminarAlguien sabe como guardar como .msg en una ubicación determinada del disco duro desde donde se ejecuta el codigo el mensaje, nicluidos los adjuntos?
ResponderEliminarYo estoy haciendo un add-In para el outlook que hace precisamente eso ... si quiere mandeme su email a jaas.jaas@gmail.com y yo le mando el proyecto para que lo mire, claro que todavia no esta terminado
ResponderEliminarTe acabo de mandar un e-mail.
ResponderEliminarGracias!!
hey tengo un código hecho en C# para descargar archivos desd una carpeta y deseo que junto con una aplikación web en html pueda hacer mediante un link la descarga en dond i como debo agregar la ruta para el link??
ResponderEliminarHola, me da error sale por el ex del catch del final.. Dice Error no se pudo enviar mensaje.
ResponderEliminarPorque sera ?
Hola, me ha servido mucho el codigo. Como hacer para enviar mas de un archivo adjunto?
ResponderEliminarGracias!
Puedes crear un array de
ResponderEliminarAttachment[] Data y despues con un ciclo los agregas en esta parte
//Agrego el archivo al mensaje
msg.Attachments.Add(Data);
quedaría algo así:
for(int i=0 ;i<Data.Count;i++)
{
msg.Attachments.Add(Data[i]);
}
Espero le sirva.
Pensé algo parecido, lo hice asi...
ResponderEliminarDonde dtPathFile es un DataTable que en la columna 3 trae la ruta de los archivos...
foreach (DataRow row in dtPathFile.Rows)
{
string PathFile =row.ItemArray[3].ToString();
//Agrego el archivo que puse en la ruta anterior "PathFile", y su tipo.
Attachment Data = new Attachment(PathFile, MediaTypeNames.Application.Zip);
//Obtengo las propiedades del archivo.
ContentDisposition disposition = Data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(PathFile);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(PathFile);
disposition.ReadDate = System.IO.File.GetLastAccessTime(PathFile);
//Agrego el archivo al mensaje
msg.Attachments.Add(Data);
}
muchas gracias por la ayuda, espero les sirva mi pequeño aporte...
Tengo otra consulta que me ha dado problemas...
ResponderEliminarAl enviar un documento mayor a 3 MB, me da un error.
System.Net.Mail.SmtpException was caught
Message=Error al enviar correo.
Source=System
StackTrace:
en System.Net.Mail.SmtpClient.Send(MailMessage message)
en EnviarMail.Enviar(DataTable dtDestinatariosMail, String asunto, String body, DataTable dtPathFile) en c:\Users\storo\Desktop\GESTION PROCESO\Gestion Proceso Desarrollo\SitioWeb\App_Code\clsMail.cs:línea 78
InnerException: System.IndexOutOfRangeException
Message=Índice fuera de los límites de la matriz.
Source=System
StackTrace:
en System.Net.Base64Stream.EncodeBytes(Byte[] buffer, Int32 offset, Int32 count, Boolean dontDeferFinalBytes, Boolean shouldAppendSpaceToCRLF)
en System.Net.Base64Stream.Write(Byte[] buffer, Int32 offset, Int32 count)
en System.Net.Mime.MimePart.Send(BaseWriter writer)
en System.Net.Mime.MimeMultiPart.Send(BaseWriter writer)
en System.Net.Mail.Message.Send(BaseWriter writer, Boolean sendEnvelope)
en System.Net.Mail.SmtpClient.Send(MailMessage message)
InnerException:
cualquier ayuda o idea será bienvenida...
Gracias!!
Es un bug por el que te da ese fallo al enviar un adjunto de mas de 3MB. Te paso el link al HotFix
ResponderEliminarhttps://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30226
Saludos
Me sale la siguiente excepcion "Se encontró un carácter no válido en el encabezado del correo: 'é'".
ResponderEliminarHola quisiera saber como resolvieron el siguiente problema:
ResponderEliminar{"An invalid character was found in the mail header: 'á'."}
a mi me sale eso también, lo raro es que ayer me funcionaba tan bien...y hoy me sale eso :S
ResponderEliminarbueno, pues lo dejo aquí escrito por si a alguien más le pasa.
ResponderEliminarmi problema estaba aquí:
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(adjuntos[i]);
disposition.ModificationDate =System.IO.File.GetLastWriteTime(adjuntos[i]);
disposition.ReadDate = System.IO.File.GetLastAccessTime(adjuntos[i]);
y es que como hoy es miÉrcoles con acento en la e...daba el error de codificación...manda cojones la cosa....xD
Que tal, oye yo tengo una duda, en el servidor de SMTP, tengo que poner el de Hotmail?? es que ya puse el smtp.live.com y demas que segun son de hotmail y nomas e dice que no encuentra el host remoto
ResponderEliminarQuiero enviar correo al servidor de mi empresa pero cual puerto y Host debo utilizar?
ResponderEliminarhola oye y como le puedo hacer para enviar correos electronicos a distintos dominios que no sea el mismo de origen como hotmail ni el de gmail es decir que envie correos de un dominio a muchos dominios
ResponderEliminarHola muy buen aporte justo lo que necesitaba, pero tengo una pregunta como puedo hacer que envie copia del correo a otro, gracias!!!
ResponderEliminarpara enviar copia del correo utiliza algo asi mira:
EliminarMailMessage message = new MailMessage();
message.From = new MailAddress(CuentaOrigen, NombreCuentaOrigen);
if (Copia.Length >= 1)
message.CC.Add(Copia);
si deseas mandarle copia a mas de una persona lo separas con "," y listo continuas con tu envio
espero te sirva
Amigo
ResponderEliminarme ha funcionado perfecto!!! pero en maquina local
sabes que tengo que modificar para montarlo a IIS 6??????
Saludos coordiales y gracias!
Pregunta, se genera un excepcion cuando envio archivos de nombres largos mas de 27 carcateres envia le archivo como utf-8hebbebebee.
ResponderEliminarAlguien me dice como seteo las direcciones de copio oculta???
ResponderEliminarGracias
Muchas gracias, me fue de mucha utilidad! gracias desde Colombia! si depronto sabes como darle prioridad alta al mensaje, te lo agradecería .
ResponderEliminarMuchísimas Gracias por el aporte! funciona a la perfección, rápido y sencillo.
ResponderEliminarGracias de nuevo!
Como podria enlazar que sea enviado el correo cuando sea inscrito algo en una base de datos?
ResponderEliminarMe da el siguiente error:
ResponderEliminarError enviando correo electrónico: El buzón de correo no está disponible. La respuesta del servidor fue: 5.3.4 554-554 5.2.0 STOREDRV.Deliver; delivery result banner