Images inside image control disappear after sending to email as an attachment

Last Reply 12 days ago By dharmendr

Posted 12 days ago

I have page contents like gridview, images and HTML label controls on a web form that are inside a panel. I also have a button that when it is clicked, the page contents (i.e., gridview, images and labels) inside the panel are sent to email as an attachment.

The issue I have now is that, after sending the panel as an attachment to an email, the images in the image controls disappear.

Here is my code that send to email

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(TextBox1.Text))
                {
                    string connectionString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
                    using (SqlConnection con = new SqlConnection(connectionString))
                    {
                        using (SqlCommand cmd = new SqlCommand("SELECT * FROM DocTable WHERE Id = @Id", con))
                        {
                            cmd.Parameters.AddWithValue("@Ind", lblprefix.Text);
                            con.Open();
                            SqlDataReader dr = cmd.ExecuteReader();
                            if (dr.Read())
                            {
                                byte[] image = (byte[])dr["logo"];
                                imgFileUpload.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(image);

                                byte[] bytess = (byte[])dr["signature"];
                                Image2.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytess);

                                byte[] QRBytes = GetQRCodeBytes(ToAbsoluteUrl("~/TestPage.aspx") + "?Id=" + Request.QueryString["Id"]);
                                Image1.ImageUrl = "data:image/jpg;base64," + Convert.ToBase64String(QRBytes);
                                // Write image as file to folder.
                                File.WriteAllBytes(Server.MapPath("qrimg.jpg"), QRBytes);
                                File.WriteAllBytes(Server.MapPath("logo.jpg"), image);
                                File.WriteAllBytes(Server.MapPath("sign.jpg"), bytess);
                                // convert and set absolute url in image.
                                Image1.ImageUrl = GetUrl("qrimg.jpg");
                                Image2.ImageUrl = GetUrl("sign.jpg");
                                imgFileUpload.ImageUrl = GetUrl("logo.jpg");
                            }
                            var ImgUrl = Image1.ImageUrl;
                            var ImagUrl = imgFileUpload.ImageUrl;
                            var ImgeUrl = Image2.ImageUrl;

                            //  string fileName = "Document" + DateTime.Now.ToString() + ".pdf";

                            using (StringWriter sw = new StringWriter())
                            {
                                using (HtmlTextWriter hw = new HtmlTextWriter(sw))
                                {
                                    this.Panel1.RenderControl(hw);
                                    StringReader sr = new StringReader(sw.ToString());
                                    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                                    using (MemoryStream memoryStream = new MemoryStream())
                                    {
                                        PdfWriter PdfWriter = PdfWriter.GetInstance(pdfDoc, memoryStream);
                                        HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
                                        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
                                        ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                                        // cssResolver.AddCssFile(Server.MapPath("~/css/style2.css"), true);
                                        IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDoc, PdfWriter)));
                                        var worker = new XMLWorker(pipeline, true);
                                        var xmlParse = new XMLParser(true, worker);
                                        pdfDoc.Open();
                                        xmlParse.Parse(sr);
                                        xmlParse.Flush();
                                        pdfDoc.Close();
                                        File.Delete(Server.MapPath("qrimg.jpg"));
                                        File.Delete(Server.MapPath("sign.jpg"));
                                        File.Delete(Server.MapPath("logo.jpg"));
                                        Image1.ImageUrl = ImgUrl;
                                        Image2.ImageUrl = ImgeUrl;
                                        imgFileUpload.ImageUrl = ImagUrl;
                                        byte[] bytes = memoryStream.ToArray();
                                        memoryStream.Close();

                                        MailMessage mm = new MailMessage("richardsa@gmail.com", this.TextBox1.Text);
                                        mm.Subject = "NEW DOCUMENT";
                                        mm.Body = "Please find Attached Document";
                                        mm.Attachments.Add(new Attachment(new MemoryStream(bytes), "Document.pdf"));
                                        mm.IsBodyHtml = true;
                                        SmtpClient smtp = new SmtpClient();
                                        smtp.Host = "smtp.gmail.com";
                                        smtp.EnableSsl = false;
                                        System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                                        NetworkCred.UserName = "richardsa@gmail.com";
                                        NetworkCred.Password = "****************";
                                        smtp.UseDefaultCredentials = true;
                                        smtp.Credentials = NetworkCred;
                                        smtp.Port = 587;
                                        smtp.Send(mm);
                                    }
                                }
                            }
                        }
                    }
                    string message = "alert('Document Sent!')";
                    ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", message, true);
                }
                else
                {
                    string message = "alert('Add an email address')";
                    ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", message, true);
                }
            }
            catch (SqlException ex)
            {
                string msg = "Error:";
                msg += ex.Message;
                throw new Exception(msg);
            }
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
            /* Verifies that the control is rendered */
        }
        public string ToAbsoluteUrl(string relativeUrl)
        {
            if (string.IsNullOrEmpty(relativeUrl))
            {
                return relativeUrl;
            }
            if (relativeUrl.StartsWith("/"))
            {
                relativeUrl = relativeUrl.Insert(0, "~");
            }

            if (!relativeUrl.StartsWith("~/"))
            {
                relativeUrl = relativeUrl.Insert(0, "~/");
            }

            var url = HttpContext.Current.Request.Url;
            var port = url.Port != 80 ? (":" + url.Port) : String.Empty;

            return String.Format("{0}://{1}{2}{3}", url.Scheme, url.Host, port, VirtualPathUtility.ToAbsolute(relativeUrl));
        }
You are viewing reply posted by: dharmendr 12 days ago.
Posted 12 days ago
RichardSa says:
                    string connectionString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
                    using (SqlConnection con = new SqlConnection(connectionString))
                    {
                        using (SqlCommand cmd = new SqlCommand("SELECT * FROM DocTable WHERE Id = @Id", con))
                        {
                            cmd.Parameters.AddWithValue("@Id", lblprefix.Text);
                            con.Open();
                            SqlDataReader dr = cmd.ExecuteReader();
                            if (dr.Read())
                            {
                                byte[] image = (byte[])dr["logo"];
                                imgFileUpload.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(image);
 
                                byte[] bytess = (byte[])dr["signature"];
                                Image2.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytess);
 
                                byte[] QRBytes = GetQRCodeBytes(ToAbsoluteUrl("~/TestPage.aspx") + "?Id=" + Request.QueryString["Id"]);
                                Image1.ImageUrl = "data:image/jpg;base64," + Convert.ToBase64String(QRBytes);
                                // Write image as file to folder.
                                File.WriteAllBytes(Server.MapPath("qrimg.jpg"), QRBytes);
                                File.WriteAllBytes(Server.MapPath("logo.jpg"), image);
                                File.WriteAllBytes(Server.MapPath("sign.jpg"), bytess);
                                // convert and set absolute url in image.
                                Image1.ImageUrl = GetUrl("qrimg.jpg");
                                Image2.ImageUrl = GetUrl("sign.jpg");
                                imgFileUpload.ImageUrl = GetUrl("logo.jpg");
                            }
                                var ImgUrl = Image1.ImageUrl;
                                var ImagUrl = imgFileUpload.ImageUrl;
                                var ImgeUrl = Image2.ImageUrl;

Make the code as common method and call when you want to display the Image.