2012-01-19 26 views
5

Đây là cách tôi hiện đang tạo một bảng và gửi nó trong email. Những gì tôi muốn làm là thay vì tạo ra một bảng và gửi nó như là văn bản trong email tôi muốn tạo một tập tin csv và đính kèm nó vào email này và sau đó gửi này. ai đó có thể vui lòng giúp tôi chỉ cho bạn cách thực hiện điều này không? cảm ơnCách tạo csv và đính kèm vào email và gửi vào 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

Bạn đã có file CSV hay bạn muốn tạo ra nó từ dữ liệu SQL? –

+0

tôi muốn tạo một cái mới từ dữ liệu sql – Beginner

+1

Bạn có yêu cầu chúng tôi viết mã cho bạn không? Đó không phải là trang web này dành cho. Nếu bạn gặp phải một số vấn đề khi viết mã đó, bạn nên hỏi về điều đó. – svick

Trả lời

14

Khi bạn đã tạo tệp CSV, bạn cần phải ghi tệp đó vào luồng. Sau đó bạn có thể thêm các tập tin đính kèm với đoạn mã sau:

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

tham chiếu cho System.Net.Mail.Attachment lớp

+1

@ Xin lỗi, tôi đã sửa đổi mã của tôi - khởi tạo luồng bộ nhớ bằng byte CSV của bạn –

+1

Thử khởi tạo thuộc tính tên của đối tượng Đính kèm, như trong mã của tôi ở trên '{Name =" data.csv "}' –

+1

bạn có chắc chắn không bạn đang sử dụng mã của tôi một cách chính xác? biên dịch và chức năng của tôi một cách chính xác, gửi một e-mail với một tập tin CSV –

0

Bạn nên xem xét đầu tiên để tạo ra một tập tin tạm thời (tệp CSV), sau đó bạn có thể thêm tập tin đính kèm để MailMessage của bạn.

Để tạo tập tin tạm thời, bạn có thể nhìn vào những liên kết này:
How to create a temporary file (for writing to) in C#?
Creating temporary folders

+0

Tại sao bạn khuyên bạn nên tạo tệp tạm thời trước? Đối với tôi, nó chỉ làm tăng thêm sự phức tạp và những thứ có thể sai. Làm điều đó trực tiếp từ một luồng có vẻ tốt hơn. Nhưng tôi hỏi đây là một câu hỏi trong trường hợp có lợi thế. – Carl

+1

Nếu bạn đang đọc (csv) và gửi (mail) trong cùng một quá trình, một dòng chắc chắn là một giải pháp tốt hơn. Cũng lưu ý rằng câu hỏi đã được chỉnh sửa từ câu trả lời. –

+0

Ah. Tôi đã không nhận ra rằng câu hỏi đã được chỉnh sửa. – Carl

Các vấn đề liên quan