2015-02-11 30 views
5

Sono in grado di inviare un allegato in una mail ma il contenuto dell'allegato è vuoto e la dimensione viene mostrata come 0 byte.L'allegato e-mail dal flusso di memoria è vuoto in C#

Dopo aver effettuato una ricerca su Internet, è stato rilevato che è necessario reimpostare la posizione del flusso di memoria su 0 per iniziare dall'inizio.

Ho provato anche quello, ma sembra che non funzioni. Puoi per favore aiutare?

Di seguito riportiamo il mio frammento di codice:

NOTA: Sono in grado di salvare la cartella di lavoro e dei dati è presente nella cartella di lavoro salvata.

 MemoryStream memoryStream = new MemoryStream(); 

     StreamWriter writer = new StreamWriter(memoryStream); 
     writer.Write(xlWorkbook); 
     writer.Flush(); 
     memoryStream.Position = 0; 
     MailMessage mail = new MailMessage(); 
     SmtpClient SmtpServer = new SmtpClient("smtpclient"); 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.Subject = "Entry"; 
     mail.Body = "Hello, PFA "; 
     System.Net.Mail.Attachment attachment; 

     attachment = new System.Net.Mail.Attachment(memoryStream,"xls"); 
     attachment.ContentDisposition.FileName = "Input" + DateTime.Now.ToString("yyyyMMdd_hhss") + ".xls"; 
     mail.Attachments.Add(attachment); 
     SmtpServer.Port = 465; 
     SmtpServer.UseDefaultCredentials = false; 
     SmtpServer.Credentials = new System.Net.NetworkCredential("Username", "password"); 
     SmtpServer.EnableSsl = true; 
     SmtpServer.Send(mail); 
     writer.Dispose(); 
+0

Sapete che il file XLS viene letto correttamente? Qual è la posizione dopo il colore? – Virmundi

+0

Il valore di posizione dopo lo svuotamento è 44 –

+0

Ultima domanda diagnostica, che succede se si cerca di 0 anziché di Posizione = 0? Come memStream.Seek (0, SeekOrigin.Begin); – Virmundi

risposta

4

Penso che l'allegato stia confondendo il sistema di posta. Il consiglio di Microsoft è di specificare il tipo di contenuto come octet. Di seguito è riportato un sostituto per l'inizializzazione dell'allegato. Il reset del tuo codice sembra a posto.

string filename = "Input" + DateTime.Now.ToString("yyyyMMdd_hhss") + ".xls"; 
attachment = new System.Net.Mail.Attachment(memoryStream, filename, MediaTypeNames.Application.Octet); 
+0

Vedere questo: https://stackoverflow.com/questions/3710677/email-attachment-from-the-memorystream-comes-empty?rq=1 –