اضافه کردن فایل PDF از MemoryStream برای فرستادن ایمیل در ASP.NET

چهارشنبه 6 خرداد 1394

در این مقاله میخواهیم اطلاعات را از پایگاه داده درون یک DataTable خوانده ، و نحوه اضافه کردن PDF از MemoryStream برای فرستادن ایمیل در ASP.NET را شرح دهیم.

اضافه کردن فایل PDF از MemoryStream  برای فرستادن ایمیل در ASP.NET

در این مقاله میخواهیم اطلاعات را از پایگاه داده  درون یک  DataTable خوانده ، و نحوه اضافه کردن PDF از  MemoryStream  برای فرستادن ایمیل در  ASP.NET را شرح دهیم.

در اینجا برای ساخت فایل PDF از کتابخانه iTextSharp استفاده کردیم همچنین برای ارسال ایمیل از کتابخانه System.Net.Mail استفاده شده است ابتدا در پنجره Solution Explorer روی Referencesکلیک راست میکنیم و گزینه Add Reference را انتخاب کرده و iTextSharp  را به پروژه خود اضافه میکنیم.

فضای نام های زیر را اضافه میکنیم:


using System.IO;
using System.Text;
using System.Data;
using System.Net;
using System.Net.Mail;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;

 در زمان اجرا با استفاده از iTextSharp   یک فایل  PDF در حافظه میسازیم و سپس به عنوان ضمیمه ایمیل ارسال میکنیم.ابتدا داده های خود را از پایگاه داده میخوانیم و درون یک DataTable میریزیم سپس تابع SendPDFEmail را فراخوانی میکنیم.درون تابع نامبرده شده با استفاده از کلاس StringBuilder یک رشته از عناصر html میسازیم.سپس رشته ساخته شده را به نوع html تبدیل و به سند PDF اضافه میکنیم.

یک نمونه از Pdfwriter با استفاده ازکلاس MemoryStream میسازیم ، ساخت MemoryStream برای ایجاد PDF در حافظه ضروری می باشد زمانی که ساخت PDF انجام شد MemoryStream به آرایه بایت تبدیل شده و به عنوان ضمیمه برای شی ایمیل اضافه شده و در نهایت ایمیل ارسال میشود.

در اینجا ار سرور GMAIL وتنظیمات SMTP برای فرستادن ایمیل استفاده میکنیم.:

            if (!this.IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[3] {
                            new DataColumn("OrderId"),
                            new DataColumn("Product"),
                            new DataColumn("Quanity")});
           
                foreach (var item in db.Orders)
                {

                    dt.Rows.Add(item.OrderId, item.Product, item.Quantity);
                    
                }
                SendPDFEmail(dt);
            }
        }

        private void SendPDFEmail(DataTable dt)
        {
            using (StringWriter sw = new StringWriter())
            {
                using (HtmlTextWriter hw = new HtmlTextWriter(sw))
                {
                    string companyName = "Barnamenevisan.org";
                    int orderNo = 2303;
                    StringBuilder sb = new StringBuilder();
                    sb.Append("<table width='100%' cellspacing='0' cellpadding='2'>");
                    sb.Append("<tr><td align='center' style='background-color: #18B5F0' colspan = '2'><b>Order Sheet</b></td></tr>");
                    sb.Append("<tr><td colspan = '2'></td></tr>");
                    sb.Append("<tr><td><b>Order No:</b>");
                    sb.Append(orderNo);
                    sb.Append("</td><td><b>Date: </b>");
                    sb.Append(DateTime.Now);
                    sb.Append(" </td></tr>");
                    sb.Append("<tr><td colspan = '2'><b>Company Name :</b> ");
                    sb.Append(companyName);
                    sb.Append("</td></tr>");
                    sb.Append("</table>");
                    sb.Append("<br />");
                    sb.Append("<table border = '1'>");
                    sb.Append("<tr>");
                    foreach (DataColumn column in dt.Columns)
                    {
                        sb.Append("<th style = 'background-color: #D20B0C;color:#ffffff'>");
                        sb.Append(column.ColumnName);
                        sb.Append("</th>");
                    }
                    sb.Append("</tr>");
                    foreach (DataRow row in dt.Rows)
                    {
                        sb.Append("<tr>");
                        foreach (DataColumn column in dt.Columns)
                        {
                            sb.Append("<td>");
                            sb.Append(row[column]);
                            sb.Append("</td>");
                        }
                        sb.Append("</tr>");
                    }
                    sb.Append("</table>");
                    StringReader sr = new StringReader(sb.ToString());

                    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
                        pdfDoc.Open();
                        htmlparser.Parse(sr);
                        pdfDoc.Close();
                        byte[] bytes = memoryStream.ToArray();
                        memoryStream.Close();

                        //MailMessage mm = new MailMessage("ایمیل فرستنده را وارد کنید", " ایمیل گیرنده را وارد کنید");
                        MailMessage mm = new MailMessage("mytest.testi.2015@gmail.com", "mytest.testi.2015@gmail.com");
                        mm.Subject = "PDF";
                        mm.Body = "iTextSharp PDF Attachment";
                        mm.Attachments.Add(new Attachment(new MemoryStream(bytes), "iTextSharpPDF.pdf"));
                        mm.IsBodyHtml = true;
                        SmtpClient smtp = new SmtpClient();
                        smtp.Host = "smtp.gmail.com";
                        smtp.EnableSsl = true;
                        NetworkCredential NetworkCred = new NetworkCredential();
                        NetworkCred.UserName = "mytest.testi.2015@gmail.com";
                        NetworkCred.Password = "test@123456";
                        smtp.UseDefaultCredentials = true;
                        smtp.Credentials = NetworkCred;
                        smtp.Port = 587;
                        smtp.Send(mm);
                        Label1.ForeColor = System.Drawing.Color.Red;
                        Label1.Text = "فاکتور برای شما  ایمیل شد.";
                    }
                }
            }
        }

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید