vtortola.NET Logo
Enviar un Stream por eMail

Enviar un Stream por eMail

por vtortola viernes, 07 de septiembre de 2007

Siguiendo con lo de enviar un archivo por eMail, puede ser que lo que queramos enviar no este en el sistema de archivos, si no que este en la memoria de nuestro programa. Un ejemplo de esto es que exportemos el contenido de un DataGridView a formato Excel ó hayamos dibujado un gráfico con GDI+ ... ó cualquier cosa que se os ocurra ... y lo queramos enviar por eMail como archivo adjunto, al igual que enviar un Stream por FTP, enviar un Stream como archivo adjunto también pude ser muy útil.

Ahí va un sencillo ejemplo:

/// <summary>
/// Envia un Stream ó derivado por eMail
/// </summary>
/// <param name="Strm">Stream</param>
/// <param name="StreamName">Nombre de fichero que tendrá</param>
/// <param name="SmtpServer">Servidor SMTP</param>
/// <param name="PortNum">Puerto del SMTP</param>
/// <param name="Auth">Credenciales</param>
/// <param name="From">Remitente</param>
/// <param name="To">Lista de destinatarios</param>
public void EnviarStream2Email(Stream Strm, string StreamName,
string SmtpServer, int PortNum, NetworkCredential Auth,
MailAddress From, params MailAddress[] To)
{
  // Configuramos nuestro servidor SMTP
  SmtpClient SC = new SmtpClient(SmtpServer, PortNum);
 
  // Conexión segura (si la soporta el servidor)
  // Imprescindible para Gmail.
  SC.EnableSsl = false;
 
  // Creamos el mensaje de email
  using (MailMessage message = new MailMessage())
  {
    // Añadimos el remitente
    message.From = From;
 
    // Añadimos los destinatarios.
    foreach (MailAddress ma in To)
      message.To.Add(ma);
 
    // Asunto
    message.Subject = "Enviando " + StreamName;
 
    // Cuerpo
    message.Body = string.Format("Archivo {0} enviado el {1} a las {2}.",
        StreamName, DateTime.Now.ToShortDateString(),
        DateTime.Now.ToShortTimeString());
 
    // Pongo el Stream al inicio
    Strm.Position = 0;
 
    // Agrego el fichero como archivo adjunto
    message.Attachments.Add(new Attachment(Strm,StreamName));
 
    // Indico mis credenciales para autenticarme
    SC.Credentials = Auth;
 
    // Indico el modo de envio.
    SC.DeliveryMethod = SmtpDeliveryMethod.Network;
 
    // Y el timeout
    SC.Timeout = 10000;
 
    // Enviar eMail
    SC.Send(message);
  }
}

Usar esta función, tan sencillo como siempre, este es un pequeño ejemplo donde creo un Stream en memoria, escribo sobre él y luego lo envio:

using (MemoryStream memorystrm = new MemoryStream())
using (StreamWriter sw = new StreamWriter(memorystrm, Encoding.ASCII))
{
  // Escribo 100 líneas para rellenar el fichero de prueba
  for (int i = 0; i < 100; i++)
  {
    sw.WriteLine("Línea prueba: {0}", i);
  }
  sw.Flush();
  EnviarStream2Email(memorystrm,"file.txt","mail.miserver.net",25, // Servidor
    new NetworkCredential("yo@miserver.net", @"m1P4sW0rD"),//Credenciales
    new MailAddress("yo@miserver.net", "Valeriano"),  // Remitente
    new MailAddress("dest1@gmail.com", "Destinatario 1"), // Destinatario 
    new MailAddress("dest2@gmail.com", "Destinatario 2")); // Destinatario 
}

Actualmente calificado 5.0 por 1 persona(s)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

.NET 2.0 | C# 2.0

Related posts

Comentarios

septiembre 7. 2007 14:06

pingback

Pingback from elbruno.com

Enviar un Stream por eMail - vtortola

elbruno.com

Comments are closed

Powered by BlogEngine.NET 1.1.1.8
This theme is a variation of Mads Kristensen by Valeriano Tórtola

Valeriano Tórtola

Personal Ver perfil
E-mail Enviar correo
LinkedIn LinkedIn
Fotos Fotos
MCPD

Publicidad

Posts recientes

Disclaimer

Las opiniones mostradas aqui son mis opniones y no representan el punto de vista de mi empresa en ninguna forma.

Creative Commons License

Esta obra está bajo una licencia de Creative Commons

Locations of visitors to this page

© Copyright 2008

Sign in

Calendario

<<  julio 2008  >>
lumamijuvido
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Ver en calendario extendido