none
Timer ile Otomatik Mail Gönderme RRS feed

  • Soru

  • Merhaba Üstadlar 

    Benim şöyle bir problemim var deneme amaçlı bir otomatik mail gönderme uygulaması yapmaya çalışıyorum. Belirli bir aşamaya geldim bu aşama ise veritabanından bilgileri exele aktarıp belirli konuma kayıt yapıyorum ardından bu exel dosyasını mail atabiliyorum.. Sorun şurada başlıyor 5 dkka bir gönderiyor ama konumda exel dosyası olduğu için ikinci bir exel dosyası daha oluşturmaya çalışıyor konumda exel dosyası oluşturduğu için hata veriyor bende exel dosyasını oluştur gönder ve sil yapmak istiyorum ama konumdan dosyayı silmeye çalıştığımda bu dosya açık olduğundan işlem yapılamıyor gibi uyarı veriyor görev yöneticisinden baktığım zaman 20 30 exel dosyasının açık olduğunu görüyorum bunu nasıl sonlandırabilirim yada sizin fikirlerinizi de almak isterim nasıl bir yol izlemeliyim. 


     private void timer1_Tick(object sender, EventArgs e)
            {
                
                    Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();
                    var workbook = xl.Workbooks.Add();
                    //xl.Visible = false;
                    Worksheet sht = ((Worksheet)workbook.ActiveSheet);
                    Range target = (Range)sht.Range["A1"];
                    string strCon = @"OLEDB;Server=DENEME;Database=deneme;Uid=sa;Password=****;";
                    string strSQL = "SELECT * from deneme";
                    sht.QueryTables.Add(strCon, target, strSQL).Refresh();
                    workbook.SaveAs("deneme.xls", Excel.XlFileFormat.xlWorkbookNormal, System.Reflection.Missing.Value, System.Reflection.Missing.Value, true, true, Excel.XlSaveAsAccessMode.xlShared, true, true, System.Reflection.Missing.Value,
                    System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                    workbook.Close();
                    SmtpClient sc = new SmtpClient();
                    sc.Port = 587;
                    sc.Host = "smtp.gmail.com";
                    sc.EnableSsl = true;
                    sc.Credentials = new NetworkCredential("deneme@gmail.com", "");
                    MailMessage mail = new MailMessage();
                    mail.From = new MailAddress("deneme@gmail.com", "Envanter Rapor");
                    mail.To.Add("deneme@gmail.com");
                    mail.Subject = "Rapor";
                    mail.IsBodyHtml = true;
                    mail.Body = "Otomaik Mail.";
                    mail.Attachments.Add(new Attachment("deneme.xls"));
                    sc.Send(mail);
                    mail.Attachments.Clear();
                    mail.Dispose();
                    System.IO.File.Delete("deneme.xls");
                    
                //}
              
                
                }


    • Düzenleyen zkannn 5 Aralık 2019 Perşembe 06:51 yanlış yazım
    4 Aralık 2019 Çarşamba 10:02

Yanıtlar

  • Excel dosyasını açık bırakıyorsunuz, silinmeyecektir ve N tane Excel calisacaktir. Excel'den cikmak icin Quit kullanmanız lazim (oradaki bir suru Missing.Value da gereksiz eklenti olmuş).

    Daha kolay yolu, Nuget'den Epplus kullanmak. Epplus ile:

    DataTable tbl = new DataTable();
    new SqlDataAdapter("SELECT * from deneme",@"Server=DENEME;Database=deneme;Uid=sa;Password=****;").Fill(tbl);
    using (ExcelPackage pck = new ExcelPackage())
    {
    	var ws = pck.Workbook.Worksheets.Add("Deneme");
    
    	//Load the collection starting from cell A1...
    	ws.Cells["A1"].LoadFromDataTable(tbl,true);
    	var fi = new FileInfo(@"c:\temp\deneme.xlsx");
    	if (fi.Exists)
    	{
    		fi.Delete();
    	}
    	pck.SaveAs(fi);
    }
    
    SmtpClient sc = ...
    // ...



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen zkannn 6 Aralık 2019 Cuma 20:33
    4 Aralık 2019 Çarşamba 10:49
    Yanıtlayıcı
  • Birseyleri yanlış yapiyorsunuz ama neyi değiştirerek yapiyorsunuz bilemem. Mesaja bakınca ilk aklıma gelen, dosya ismini yanlış yazdiginiz. Tam yolunu yazmamissiniz, c:deneme.xls'i deneme.xls olarak degerlendirecektir.

    Anydesk id verirseniz 5 dk bakalım.

     


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen zkannn 6 Aralık 2019 Cuma 20:33
    5 Aralık 2019 Perşembe 10:26
    Yanıtlayıcı

Tüm Yanıtlar