9
votes

Envoi de courrier avec des pièces jointes Programmatiquement dans ASP.NET

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();


1 commentaires

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 ()).


4 Réponses :


0
votes

Vous pouvez enregistrer le contenu du fichier dans une matrice d'octet, puis faites ceci:

Création de pièces jointes de messagerie en mémoire


3 commentaires

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.



8
votes

Vous pourriez peut-être créer System.net.Mail.atchment à partir de chaîne, puis envoyez le courrier comme normal. XXX


1 commentaires

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.



1
votes
    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);
    }

0 commentaires

0
votes

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);
            }
        }


0 commentaires