2012-01-19 79 views
5

Así es como estoy creando una tabla y enviándola en un correo electrónico. Lo que me gustaría hacer es, en lugar de crear una tabla y enviarla como texto en el correo electrónico, me gustaría crear un archivo csv y adjuntarlo a este correo electrónico y luego enviarlo. ¿Podría alguien ayudarme a mostrarme cómo se puede hacer esto? graciasCómo crear un csv y adjuntarlo al correo electrónico y enviar en C#

using (MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(csv))) 
    { 
     try 
     { 
      string to = ""; 
      string from = ""; 
      string subject = "Order"; 
      string body = sb.ToString(); 
      SmtpClient SMTPServer = new SmtpClient("127.0.0.1"); 
      MailMessage mailObj = new MailMessage(from, to, subject, body); 
      mailObj.Attachments.Add(new Attachment(stream, new ContentType("text/csv"))); 
      mailObj.IsBodyHtml = true; 
      SMTPServer.Send(mailObj); 
     } 
     catch (Exception ex) 
     { return "{\"Error\":\"Not Sent\"}"; } 
    } 
+0

¿Ya tienes el archivo CSV o ¿desea generarlo a partir de los datos de SQL? –

+0

deseo crear uno nuevo a partir de los datos sql – Beginner

+1

¿Nos está pidiendo que escribamos el código para usted? Para eso no es este sitio. Si encuentra algún problema al escribir ese código, debe preguntar al respecto. – svick

Respuesta

14

Una vez que haya generado el archivo CSV, necesita escribirlo en una secuencia. A continuación, puede añadir el archivo adjunto con el siguiente código:

//Stream containing your CSV (convert it into bytes, using the encoding of your choice) 
using (MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(csv))) 
{ 
    //Add a new attachment to the E-mail message, using the correct MIME type 
    Attachment attachment = new Attachment(stream, new ContentType("text/csv")); 
    attachment.Name = "test.csv"; 
    mailObj.Attachments.Add(attachment); 

    //Send your message 
    try 
    { 
    using(SmtpClient client = new SmtpClient([host]){Credentials = [credentials]}) 
    { 
     client.Send(mailObj); 
    } 
    } 
    catch 
    { 
    return "{\"Error\":\"Not Sent\"}"; 
    } 
} 

referencia para System.Net.Mail.Attachment clase

+1

Disculpas @Beginner, he modificado mi código - inicialice la secuencia de memoria con los bytes de su CSV –

+1

Intente inicializar la propiedad de nombre del objeto Adjunto, como en mi código anterior '{Name =" data.csv "}' –

+1

¿está seguro estás usando mi código correctamente? la mía compila y funciona correctamente, enviando un correo electrónico con un archivo CSV –

0

Debe buscar primero en crear un archivo temporal (archivo CSV), entonces se puede añadir el archivo adjunto a su MailMessage.

Para crear el archivo temporal, se puede ver en estos enlaces:
How to create a temporary file (for writing to) in C#?
Creating temporary folders

+0

¿Por qué recomienda crear primero un archivo temporal? Para mí, solo agrega complejidad y cosas que pueden salir mal. Hacerlo directamente desde una secuencia parece mejor. Pero estoy preguntando esto como una pregunta en caso de que haya ventajas. – Carl

+1

Si está realizando la lectura (csv) y el envío (correo) en el mismo proceso, una transmisión es definitivamente una mejor solución. También tenga en cuenta que la pregunta ha sido editada desde la respuesta. –

+0

Ah. No me di cuenta de que la pregunta había sido editada. – Carl

Cuestiones relacionadas