none
Oluşturulan raporu mail olarak gönderme RRS feed

  • Soru

  • Merhabalar, Aşağıdaki ekranı preview çıkmadan önce mail olarak göndermek istiyorum. PDF'e çevirip göndermek mantıklı ancak çevirmek istediğim zaman bol karakterli bir döküman çıkıyor. Bir fikir verebilecek var mı?


    16 Eylül 2017 Cumartesi 22:34

Yanıtlar

  • Merhaba 

    Kodlarınızı bilmediğim için üretebileceğim sınırlı çözümlerin hata vermesi doğal. Aşağıdaki kodu deneyebilirsiniz?

       private void mailsend()
            {
                var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("**", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("**");
                mail.To.Add("**");
                mail.IsBodyHtml = true;
                mail.Subject = "*******";
    			DataTable dt = new DataTable();
    			var srg = DB.VW_FATURALARs.Where(s => s.FATURANO == txtFaturaNo.Text);
    			dt=LINQToDataTable(srg);
                mail.Body = ExportDatatableToHtml(dt);
                //mail.Body= mailBody;
                client.Send(mail);
         
            } 

    • Yanıt Olarak İşaretleyen Xajnick 17 Eylül 2017 Pazar 17:51
    17 Eylül 2017 Pazar 17:38

Tüm Yanıtlar

  • Merhaba

    Sanırım Preview ekranına veriler datagridviewden veya veritabanından geliyor. Sonuçta ortak nokta veritabanı. Veritabanından verileri çekerken kullandığın datatable nesnesini aşağıdaki fonksiyona gönderdiğinde html kod yapısında bir text döndürecek. daha sonra dönen texti mail bodysine ekleyerek gönderebilirsin.

    protected string ExportDatatableToHtml(DataTable dt)  
    {  
    StringBuilder strHTMLBuilder = new StringBuilder();  
    strHTMLBuilder.Append("<html >");  
    strHTMLBuilder.Append("<head>");  
    strHTMLBuilder.Append("</head>");  
    strHTMLBuilder.Append("<body>");  
    strHTMLBuilder.Append("<table border='1px' cellpadding='1' cellspacing='1' bgcolor='lightyellow' style='font-family:Garamond; font-size:smaller'>");  
      
    strHTMLBuilder.Append("<tr >");  
    foreach (DataColumn myColumn in dt.Columns)  
    {  
    strHTMLBuilder.Append("<td >");  
    strHTMLBuilder.Append(myColumn.ColumnName);  
    strHTMLBuilder.Append("</td>");  
      
    }  
    strHTMLBuilder.Append("</tr>");  
      
      
    foreach (DataRow myRow in dt.Rows)  
    {  
      
    strHTMLBuilder.Append("<tr >");  
    foreach (DataColumn myColumn in dt.Columns)  
    {  
    strHTMLBuilder.Append("<td >");  
    strHTMLBuilder.Append(myRow[myColumn.ColumnName].ToString());  
    strHTMLBuilder.Append("</td>");  
      
    }  
    strHTMLBuilder.Append("</tr>");  
    }  
      
    //Close tags.  
    strHTMLBuilder.Append("</table>");  
    strHTMLBuilder.Append("</body>");  
    strHTMLBuilder.Append("</html>");  
      
    string Htmltext = strHTMLBuilder.ToString();  
      
    return Htmltext;  
      
    }  

    17 Eylül 2017 Pazar 08:42
  • Merhaba

    Sanırım Preview ekranına veriler datagridviewden veya veritabanından geliyor. Sonuçta ortak nokta veritabanı. Veritabanından verileri çekerken kullandığın datatable nesnesini aşağıdaki fonksiyona gönderdiğinde html kod yapısında bir text döndürecek. daha sonra dönen texti mail bodysine ekleyerek gönderebilirsin.

    protected string ExportDatatableToHtml(DataTable dt)  
    {  
    StringBuilder strHTMLBuilder = new StringBuilder();  
    strHTMLBuilder.Append("<html >");  
    strHTMLBuilder.Append("<head>");  
    strHTMLBuilder.Append("</head>");  
    strHTMLBuilder.Append("<body>");  
    strHTMLBuilder.Append("<table border='1px' cellpadding='1' cellspacing='1' bgcolor='lightyellow' style='font-family:Garamond; font-size:smaller'>");  
      
    strHTMLBuilder.Append("<tr >");  
    foreach (DataColumn myColumn in dt.Columns)  
    {  
    strHTMLBuilder.Append("<td >");  
    strHTMLBuilder.Append(myColumn.ColumnName);  
    strHTMLBuilder.Append("</td>");  
      
    }  
    strHTMLBuilder.Append("</tr>");  
      
      
    foreach (DataRow myRow in dt.Rows)  
    {  
      
    strHTMLBuilder.Append("<tr >");  
    foreach (DataColumn myColumn in dt.Columns)  
    {  
    strHTMLBuilder.Append("<td >");  
    strHTMLBuilder.Append(myRow[myColumn.ColumnName].ToString());  
    strHTMLBuilder.Append("</td>");  
      
    }  
    strHTMLBuilder.Append("</tr>");  
    }  
      
    //Close tags.  
    strHTMLBuilder.Append("</table>");  
    strHTMLBuilder.Append("</body>");  
    strHTMLBuilder.Append("</html>");  
      
    string Htmltext = strHTMLBuilder.ToString();  
      
    return Htmltext;  
      
    }  

    Cevabın için teşekkürler. Fakat datatable'ı bir türlü gönderemedim.
    17 Eylül 2017 Pazar 11:12
  • Merhaba

    Problemi biraz daha açıklayıcı yazabilir misiniz?

    17 Eylül 2017 Pazar 11:31
  • Merhaba

    Problemi biraz daha açıklayıcı yazabilir misiniz?

     Veritabanından çekerken kullandığım Linqi verdiğiniz fonksiyona ekleyemedim.

    Aşağıdaki kodu previewe aktarmak için bunu kullanıyorum ;

     var srg = DB.VW_FATURALARs.Where(s => s.FATURANO == txtFaturaNo.Text);
                DataSet ds = new DataSet();
                ds.Tables.Add(LINQToDataTable(srg));
                rprSatisFaturası rpr = new rprSatisFaturası();
                rpr.DataSource = ds;
                rpr.ShowPreview();

    SQL'den çekerken Kullandığım kod;

     public DataTable LINQToDataTable<T>(IEnumerable<T> Lnqlst)
            {
                DataTable dt = new DataTable();


                PropertyInfo[] columns = null;

                if (Lnqlst == null) return dt;

                foreach (T Record in Lnqlst)
                {

                    if (columns == null)
                    {
                        columns = ((Type)Record.GetType()).GetProperties();
                        foreach (PropertyInfo GetProperty in columns)
                        {
                            Type colType = GetProperty.PropertyType;

                            if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
                            == typeof(Nullable<>)))
                            {
                                colType = colType.GetGenericArguments()[0];
                            }

                            dt.Columns.Add(new DataColumn(GetProperty.Name, colType));
                        }
                    }

                    DataRow dr = dt.NewRow();

                    foreach (PropertyInfo pinfo in columns)
                    {
                        dr[pinfo.Name] = pinfo.GetValue(Record, null) == null ? DBNull.Value : pinfo.GetValue
                        (Record, null);
                    }

                    dt.Rows.Add(dr);
                }
                return dt;

    17 Eylül 2017 Pazar 13:09
  • Merhaba

    Fonksiyonu projene ekledikten sonra 

    string body=ExportDatatableToHtml(dt);

    kodu ile body değişkenine atamayı dener misin?

    17 Eylül 2017 Pazar 14:03
  • Merhaba

    Fonksiyonu projene ekledikten sonra 

    string body=ExportDatatableToHtml(dt);

    kodu ile body değişkenine atamayı dener misin?

    Bunu da denemiştim. doesnt exist in the current context hatası veriyor.
    17 Eylül 2017 Pazar 14:08
  • Merhaba hatanın tam metnini yazabilir misin? Bu hata değişkenin tanımlanmadığını veya yanlış yerde tanımlandığını belirtiyor.

    17 Eylül 2017 Pazar 14:13
  • Merhaba hatanın tam metnini yazabilir misin? Bu hata değişkenin tanımlanmadığını veya yanlış yerde tanımlandığını belirtiyor.

    Tam olarak bu

    Error 8 The name 'dt' does not exist in the current contex

    17 Eylül 2017 Pazar 14:17
  • Merhaba kendi yazdığın fonksiyonu kullandığın kodları da atabilir misin? Yani 

    public DataTable LINQToDataTable<T>(IEnumerable<T> Lnqlst)
            {
                DataTable dt = new DataTable();
                ....
            }

    fonksiyonunu çağırdığın alan. Yüksek ihtimalle Datatable dt tanımlamasını yanlış yerde yapıyorsun veya hiç yapmıyorsun.


    17 Eylül 2017 Pazar 14:21
  • Merhaba kendi yazdığın fonksiyonu kullandığın kodları da atabilir misin? Yani 

    public DataTable LINQToDataTable<T>(IEnumerable<T> Lnqlst)
            {
                DataTable dt = new DataTable();
                ....
            }

    fonksiyonunu çağırdığın alan. Yüksek ihtimalle Datatable dt tanımlamasını yanlış yerde yapıyorsun veya hiç yapmıyorsun.


     public DataTable LINQToDataTable<T>(IEnumerable<T> Lnqlst)
            {
                DataTable dt = new DataTable();

                string Body = ExportDatatableToHtml(dt);

                PropertyInfo[] columns = null;

    Burada çağırıyorum değil mi?

    17 Eylül 2017 Pazar 14:29
  • Merhaba

    bu alanda çağırdığınızda datatable boş olduğu için işlem görmeyecektir. fonksiyonun sonunda return dt ile datatable dolu olarak dışa veriliyor. dışa verilen dtyi kullandığın satırdan sonra yazdığım fonksiyonu kullanabilirsin. 

    17 Eylül 2017 Pazar 14:51
  • Merhaba

    bu alanda çağırdığınızda datatable boş olduğu için işlem görmeyecektir. fonksiyonun sonunda return dt ile datatable dolu olarak dışa veriliyor. dışa verilen dtyi kullandığın satırdan sonra yazdığım fonksiyonu kullanabilirsin. 

     DataRow dr = dt.NewRow();

                    foreach (PropertyInfo pinfo in columns)
                    {
                        dr[pinfo.Name] = pinfo.GetValue(Record, null) == null ? DBNull.Value : pinfo.GetValue
                        (Record, null);
                    }

                    dt.Rows.Add(dr);
                }

                return dt;

    string Body = ExportDatatableToHtml(dt);

    Bu şekilde kullandım. Son sorum mail.body= ....; burada hangi fonksiyonu çağırıcam ?

               
    17 Eylül 2017 Pazar 15:07
  • merhaba ExportDatatableToHtml fonksiyonunu kullanabilirsiniz.

    ExportDatatableToHtml(dt);

    17 Eylül 2017 Pazar 15:44
  • merhaba ExportDatatableToHtml fonksiyonunu kullanabilirsiniz.

    ExportDatatableToHtml(dt);

       private void mailsend()
            {
                var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("**", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("**");
                mail.To.Add("**");
                mail.IsBodyHtml = true;
                mail.Subject = "*******";
    
                mail.Body = ExportDatatableToHtml(dt);
                //mail.Body= mailBody;
                client.Send(mail);
         
            } 
    Bu şekilde yapınca  ExportDatatabletoHtml(dt) kısmında aynı hatayı veriyor. Nerede yazmam gerekiyordu?
    17 Eylül 2017 Pazar 16:04
  • Merhaba

    aşağıdaki şekilde deneyebilir misin?

       private void mailsend()
            {
                var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("**", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("**");
                mail.To.Add("**");
                mail.IsBodyHtml = true;
                mail.Subject = "*******";
    			DataTable dt = new DataTable();
    			dt=LINQToDataTable(srg);
                mail.Body = ExportDatatableToHtml(dt);
                //mail.Body= mailBody;
                client.Send(mail);
         
            } 

    17 Eylül 2017 Pazar 16:43
  • Merhaba

    aşağıdaki şekilde deneyebilir misin?

       private void mailsend()
            {
                var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("**", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("**");
                mail.To.Add("**");
                mail.IsBodyHtml = true;
                mail.Subject = "*******";
    			DataTable dt = new DataTable();
    			dt=LINQToDataTable(srg);
                mail.Body = ExportDatatableToHtml(dt);
                //mail.Body= mailBody;
                client.Send(mail);
         
            } 

    dt = LINQToDataTable(srg);
    srg contex hatası veriyor. 

    17 Eylül 2017 Pazar 17:14
  • Merhaba 

    Kodlarınızı bilmediğim için üretebileceğim sınırlı çözümlerin hata vermesi doğal. Aşağıdaki kodu deneyebilirsiniz?

       private void mailsend()
            {
                var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("**", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("**");
                mail.To.Add("**");
                mail.IsBodyHtml = true;
                mail.Subject = "*******";
    			DataTable dt = new DataTable();
    			var srg = DB.VW_FATURALARs.Where(s => s.FATURANO == txtFaturaNo.Text);
    			dt=LINQToDataTable(srg);
                mail.Body = ExportDatatableToHtml(dt);
                //mail.Body= mailBody;
                client.Send(mail);
         
            } 

    • Yanıt Olarak İşaretleyen Xajnick 17 Eylül 2017 Pazar 17:51
    17 Eylül 2017 Pazar 17:38
  • Merhaba 

    Kodlarınızı bilmediğim için üretebileceğim sınırlı çözümlerin hata vermesi doğal. Aşağıdaki kodu deneyebilirsiniz?

       private void mailsend()
            {
                var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("**", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("**");
                mail.To.Add("**");
                mail.IsBodyHtml = true;
                mail.Subject = "*******";
    			DataTable dt = new DataTable();
    			var srg = DB.VW_FATURALARs.Where(s => s.FATURANO == txtFaturaNo.Text);
    			dt=LINQToDataTable(srg);
                mail.Body = ExportDatatableToHtml(dt);
                //mail.Body= mailBody;
                client.Send(mail);
         
            } 

     var client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential("****", "***,");
    
                var mail = new MailMessage();
                mail.From = new MailAddress("z**m");
                mail.To.Add("***");
                mail.IsBodyHtml = true;
                mail.Subject = "*******Sipariş"; DataTable dt = new DataTable();
                
                var srg = DB.VW_FATURALARs.Where(s => s.FATURANO == txtFaturaNo.Text);
                dt = LINQToDataTable(srg);
                mail.Body = ExportDatatableToHtml(dt);
                client.Send(mail);

    Bu şekilde oldu. Yardımlarınız için çok teşekkürler. Bu şekilde bir projeyi ilk kez deniyorum. Baya da yordum sizi.
    17 Eylül 2017 Pazar 17:45