Ho un documento excel rappresentato come un byte [] e sto volendo inviarlo come allegato in un'email.Come si aggiunge un allegato a un'e-mail tramite System.Net.Mail?
Ho un po 'di problemi nel costruire l'allegato.
posso creare un allegato che ha i seguenti costruttori:
(Stream contentStream, ContentType contentType)
(Stream contentStream, string name)
(Stream contentStream, string name, string mediaType)
La mia idea in questo momento è quello di creare un MemoryStream dal byte [] e passarlo al metodo che crea l'allegato.
Purtroppo non riesco a vedere un modo per ottenere il nome file e il tipo di contenuto desiderato da MemoryStream e inoltre non riesco a vedere come fornire il tipo di contenuto corretto. Ci sono opzioni per il testo normale, Pdf, Rtf ecc. Ma nessuna che io possa vedere che mi salta immediatamente addosso come quella che dovrei usare per un documento Excel.
Il più vicino che posso trovare è MediaTypeNames.Application.Octet in cui si afferma:
Il membro ottetto indica che l'allegato contiene generici dati binari .
Tuttavia, anche se questo è quello da utilizzare, a meno che non possa essere passato come una proprietà del flusso, il mio metodo per l'invio di e-mail sarà solo in grado di inviare un byte [] come documento Excel.
C'è forse qualche altro tipo di flusso che potrei usare? O dovrò creare il mio tipo di Stream con i dettagli che mi servono.
Sicuramente qualcuno là fuori ha fatto questa cosa prima e sicuramente Microsoft avrebbe pensato questo attraverso a questo livello ....
Qualsiasi aiuto sarebbe molto apprezzato.
Aggiornamento: Non votare per le risposte che utilizzano i costruttori che prendono il nome di file come una stringa. Ho davvero bisogno di aiuto per usare quelli che fanno uno streaming ... Voglio evitare di dover scrivere il file su disco, inviarlo via email e poi cancellarlo immediatamente. Dato che c'è un metodo che mi permette di farlo, mi piacerebbe usarlo se possibile.
soluzione di aggiornamento
Conrad è riuscito a trovare quello che cercavo! Grazie amico uomo!
Mi limiterò a documentare la soluzione suggerita nel caso in cui qualcosa accada al contenuto al collegamento fornito.
Credito per questa soluzione va a www.systemnetmail.com
static void AttachmentFromStream()
{
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
//set the content
mail.Subject = "This is an email";
mail.Body = "this content is in the body";
//Get some binary data
byte[] data = GetData();
//save the data to a memory stream
MemoryStream ms = new MemoryStream(data);
//create the attachment from a stream. Be sure to name the data
//with a file and
//media type that is respective of the data
mail.Attachments.Add(new Attachment(ms, "example.txt", "text/plain"));
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);
}
Nel mio caso, significa solo che dovrò cambiare il mio metodo per prendere il nome del file e fileformat come stringhe. Proverò a usare l'Octet ... ma non riuscirò a passare il tipo MIME ufficiale.
Tutto considerato, questa è una soluzione piuttosto ovvia ... ma apprezzo l'aiuto nel risolverlo ...e la cosa buona è che questa soluzione sarà documentata per i futuri programmatori che hanno lo stesso problema.
Grazie ancora a tutti per l'aiuto!
Grazie! Questo è esattamente quello che stavo cercando. Come sei riuscito a trovarlo? Suppongo che entrambi usiamo lo stesso Google per la ricerca? – mezoid
Ah ah! Bene, diciamo che nel corso del mio lavoro trascorro molto del mio tempo alla ricerca di risposte ai problemi! – Rad
Grazie Rad, collegamento molto maneggevole che – JsonStatham