Merhaba değerli arkadaşlar windows servis projesinde ilk önce excele datayı aktarıyorum fakat diske yazdırmadan mail gönderemiyorum.Diske kayıt işlemi yapmadan excelle aktarıp sonra mail göndermek istiyorum bu işlem için ne öneririsiniz?

public void SendExcelSheet(DataTable dt, string licencePlate, string cols, string startDate, string endDate)
{
    try
    {
        var excel = new Application();
        var workbook = excel.Workbooks.Add(true);

        Sheets sheets = workbook.Sheets;
        Worksheet newSheet = (Worksheet) sheets.Add();

        newSheet.StandardWidth = 15;
        newSheet.Cells[1, 1] = "######";
        newSheet.Cells[2, 1] = licencePlate+" Plakalı Araç için " + startDate + " ile " + endDate + " Tarihleri Arasında Toplam Kayıt:" + dt.Rows.Count;

        var colarr = cols.Split(',');

        for (var i = 0; i < colarr.Length; i++)
        {
            newSheet.Cells[4, i+1] = colarr[i];
        }

        int iRow = 3;

        foreach (DataRow r in dt.Rows)
        {
            iRow++;
            // add each row's cell data...
            var iCol = 0;
            foreach (DataColumn c in dt.Columns)
            {
                iCol++;
                newSheet.Cells[iRow + 1, iCol] = r[c.ColumnName].ToString();
            }
        }

        var fileName = "ExcelReport" + DateTime.Now.ToString("yyyyMMddHHmmss");

        //send email?

        workbook.Close();
        excel.Quit();

        releaseObject(newSheet);
        releaseObject(sheets);
        releaseObject(workbook);
        releaseObject(excel);

    }
    catch (Exception ex)
    {
        var myErr = new Error();
        myErr.DebugLog("AddExcelSheet:" + ex.Message + "");
    }
}

soruldu: 14 Ağu '15, 02:42

aspci's gravatar image

aspci
759404757
cevap kabul oranı: 25%

değiştirildi: 19 Ağu '15, 14:56


aspci, boş bir web project açıp aşağıdaki örnek uygulamayı geliştirdim. Fatih Aşlamacı arkadaşımızda benzer noktalara değinmiş.Sadece kodu toplarlamış oldum.

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_OnClick(object sender, EventArgs e)
    {
        Workbook wb = new Workbook(FileFormatType.Xlsx);
        wb.Worksheets[0].Cells[2, 2].PutValue("Muslum Ozturk");
        var ms=new MemoryStream();

        wb.Save(ms,SaveFormat.Xlsx);
        SendFileFromMail(ms,"abc.xlsx");
        ms.Close();
    }

    public void SendFileFromMail(MemoryStream ms,string fileName)
    {
        var fromAddress = new MailAddress("deneme@gmail.com", "From Name");
        var toAddress = new MailAddress("muslum.ozturk@hotmail.com", "To Name");
        const string fromPassword = "parola";
        const string subject = "Subject";
        const string body = "Body";

        var smtp = new SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        };

        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = body
        })

        {
            if (ms != null)
            {
                ms.Seek(0, SeekOrigin.Begin);
                message.Attachments.Add(new Attachment(ms, fileName, "application/vnd.ms-excel"));
            }

            smtp.Send(message);
        }
    }
}

Not: Mail gönderirken "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. " hatasını alırsan aşağıdaki adımları denemelisin.

1- "https://www.google.com/settings/security/lesssecureapps" sayfasını açıp "Daha az güvenli uygulamalar için erişim" özelliğini açık yap.

2- Eğer hala hata alıyor isen "https://security.google.com/settings/security/activity?rfn=27" sayfasından cihazınızı doğrulayın.

İyi çalışmalar

permanent link

cevaplandı: 21 Ağu '15, 11:53

M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Müslüm ÖZTÜRK
10.7k103691
cevap kabul oranı: 28%

Müslüm hocam bilginizi paylaştığınız için çook teşekkür ederim denedim uyguladım çalışıyor

(21 Ağu '15, 16:47) aspci aspci's gravatar image

aşağıdaki kod örneği ile dosyayı diske kaydetmeden maile ek yapılabiliyor. ancak excel için biraz araştırmak lazım. belki mümkündür. araştırılması gereken şey "MemoryStream e Excel dosyası aktarmak"

System.IO.MemoryStream ms = new System.IO.MemoryStream();
    System.IO.StreamWriter writer = new System.IO.StreamWriter(ms);
    writer.Write("Ad;Soyad;email");
    writer.Write("Fatih;Aşlamacı;a@a.com");

writer.Flush();
writer.Dispose();

System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Plain);
System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(ms, ct);
attach.ContentDisposition.FileName = "person.csv";

ms.Close();


Edit:
aşağıdaki kodu netde buldum. ama denemedim. MemoryStream e excel dosyası aktarıyor. yukardaki kod örneğide zaten MemoryStream e aktarılan dosyayı maile attach ediyor. bu umarım işini görür

MemoryStream ms = new MemoryStream();
book.Save(ms, SaveFormat.Xlsx);
permanent link

cevaplandı: 19 Ağu '15, 13:43

Fatih%20A%C5%9Flamac%C4%B1's gravatar image

Fatih Aşlamacı
1.0k111929
cevap kabul oranı: 14%

değiştirildi: 19 Ağu '15, 14:58

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×1
×1

Soruldu: 14 Ağu '15, 02:42

Görüntüleme: 607 kez

Son güncelleme: 21 Ağu '15, 16:47

powered by BitNami OSQA