Il génère de manière dynamique un certain nombre de types de fichiers différents basés sur une grille à grille dans ASP.NET - une feuille de calcul Excel et un fichier HTML. Je le fais en utilisant ce code (ceci est juste pour la feuille de calcul Excel):
Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=InvoiceSummary" + Request.QueryString["id"] + ".xls"); Response.Charset = ""; Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); contents.RenderControl(htmlWrite); //GridView1.RenderControl(htmlWrite); Response.Write(stringWrite.ToString()); Response.End();
4 Réponses :
Vous pouvez enregistrer le contenu du fichier dans une matrice d'octet, puis faites ceci: p>
Négage d'Aliostad's -1. En lisant la question, Chris souhaite envoyer le courrier à l'utilisateur à partir de son serveur, et c'est la bonne façon de le faire. System.net.Mail fonctionne la même chose à partir d'un bureau ou d'une application Web.
@Aliostad: Alors, quel est le problème? La génération de fichiers est le côté serveur, donc je ne pense pas que cela devrait être un problème.
Je crois toujours que cela est censé être fait chez le client. Mais j'ai essayé de revoir mon -1 de toute façon, mais cela ne me permet pas.
Vous pourriez peut-être créer System.net.Mail.atchment à partir de chaîne, puis envoyez le courrier comme normal.
Je souhaite créer le StringBuilder généré (qui est effectué) à une pièce jointe à Outlook et attendez que l'utilisateur appuie sur Envoyer. Je continue d'avoir une erreur.
protected void btnSend_OnClick(object sender, EventArgs e) { MailMessage mail = new MailMessage(); byte[] data = new byte[1024]; MemoryStream stream = new MemoryStream(data); Attachment attach = new Attachment(stream, "Attachment file name"); mail.Attachments.Add(attach); new SmtpClient().Send(mail); }
Voici un exemple de travail de ce que j'ai mentionné plus tôt, il existe une petite logique supplémentaire dans le code pour analyser la grille à une table.
//Table to store our GridView Data Table table = new Table(); //Parse our GridView into Table, stored in a StringBuilder StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { // header if (GridView1.HeaderRow != null) { table.Rows.Add(GridView1.HeaderRow); } // details foreach (GridViewRow row in GridView1.Rows) { table.Rows.Add(row); } // footer if (GridView1.FooterRow != null) { table.Rows.Add(GridView1.FooterRow); } // render table table.RenderControl(htw); } } using (MemoryStream memoryStream = new MemoryStream()) { using (StreamWriter writer = new StreamWriter(memoryStream)) { //Convert StringBuilder to MemoryStream writer.Write(sb.ToString()); writer.Flush(); //Create Message MailMessage message = new MailMessage(); message.To.Add(new MailAddress("you@address.com", "You")); message.From = new MailAddress("me@address.com", "Me"); message.Subject = "The Subject"; //Create Attachment Attachment attachment = new Attachment(memoryStream, "InvoiceSummary.xls", "application/vnd.xls"); //Attach Attachment to Email message.Attachments.Add(attachment); //Open SMTP connection to server and send SmtpClient smtp = new SmtpClient(); smtp.Port = 25; smtp.Send(message); } }
La classe MailMessage a une propriété des pièces jointes qui feront cela. Il suffit de créer une nouvelle pièce jointe (peut être basée sur une mémoire Morthstream), puis de la fixation (par exemple mailmessage.attachments.add ()).