2012-01-19 4 views
5

Tak właśnie tworzę tabelę i wysyłam ją w wiadomości e-mail. Zamiast tworzyć tabelę i wysyłać ją jako tekst w wiadomości e-mail, chciałbym utworzyć plik csv i dołączyć go do tego e-maila, a następnie wysłać go. czy ktoś mógłby mi pomóc pokazać, jak można to zrobić? dziękiJak utworzyć plik CSV i dołączyć do wiadomości e-mail i wysłać 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

Czy masz już plik CSV lub chcecie, aby wygenerować go z danych SQL? –

+0

Chcę utworzyć nowy z danych sql – Beginner

+1

Czy prosisz nas o napisanie kodu dla Ciebie? Nie do tego służy ta strona. Jeśli napotkasz problem podczas pisania tego kodu, powinieneś o to zapytać. – svick

Odpowiedz

14

Po wygenerowaniu pliku CSV, musisz zapisać go do strumienia. Następnie można dodać załącznik z następującego kodu:

//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\"}"; 
    } 
} 

Odesłanie System.Net.Mail.Attachment klasa

+1

@ Przepraszacze przepraszam, poprawiłem swój kod - zainicjuj strumień pamięci za pomocą bajtów CSV –

+1

Spróbuj zainicjować właściwość name obiektu Attachment, tak jak w moim kodzie powyżej '{Name =" data.csv "}' –

+1

jesteś pewien? używasz mojego kodu poprawnie? kopalnia kompiluje się i działa poprawnie, wysyłając wiadomość e-mail z plikiem CSV –

0

Należy spojrzeć najpierw stworzyć tymczasowy plik (plik CSV), a następnie można dodać załącznik do MailMessage.

Aby utworzyć plik temp, można spojrzeć na te linki:
How to create a temporary file (for writing to) in C#?
Creating temporary folders

+0

Dlaczego zaleca się najpierw utworzenie tymczasowego pliku? Dla mnie to po prostu dodaje złożoności i rzeczy, które mogą pójść nie tak. Wykonanie go bezpośrednio ze strumienia wydaje się lepsze. Ale pytam o to jako pytanie na wypadek, gdyby były zalety. – Carl

+1

Jeśli czytasz (csv) i send (mail) w tym samym procesie, strumień jest zdecydowanie lepszym rozwiązaniem. Zauważ też, że pytanie zostało zmienione od czasu odpowiedzi. –

+0

Ah. Nie zdawałem sobie sprawy, że pytanie zostało zredagowane. – Carl