Merhabalar, C# Mail Gönderme İşlemleri – Attachment Ekleme dersim ile C# eğitim setime devam ediyorum. Bu ders, C# Mail Gönderme İşlemleri dersime bir ek niteliğindedir. Bu dersimde C# mail Attachment ekleme işlemi yer alıyor olsa da bazı arkadaşlarımız için tam olarak açık olmadığını, bu konuda gelen sorulardan dolayı anladım.. Bu sebeple bende bu C# mail attachmet konusunu ayrıca açıklama gereği hissettim.
C# Mail Gönderme İşlemleri – Attachment Ekleme
Öncelikle mail gönderme attachmet ekleme konusunu C# Mail Gönderme İşlemleri bu ders üzerinden anlatacağım. Mail gönderme kodlarına bağlantıya tıklayarak ulaşabilirsiniz. Şimdi sadece göndermek istediğimiz maile attachment ekleme kodlarını alalım.
string[] sonuc1 = Regex.Split(MailEkleri, "/"); // MailEkleri parametresinde mailie ekleyeceğimiz tüm dosyaları aralarına " / " koyarak birbilerine ekledik foreach (string items in sonuc1) { if (items != "") { mail.Attachments.Add(new Attachment("\\Mail_Eklerinin_Yolu\\" + items)); // MailEkleri parametresinden gelen veriyi " / " işareti sayesinde parçaladık. // Kaydettiğimiz yerin yolunu ile birlikte dosyaları aldık ve maile ekledik. } }
İlk satırda yer alan “MailEkleri” değişkenimiz, mail gönderme metodunun aldığı bir parametredir.
Bu metodu (biraz farklı olarak) aktif olarak projelerimde kullanıyorum. Burada maile eklenmesini istediğim dosya ekleri arasına “/” karakterini koyarak mail gönderme metoduna gönderiyorum. Maile gönderme metodu içerisinde de dosyaları “/” karakterine göre split() ederek kaç tane dosya eklenmiş ise onları bir diziye alıyorum.
ForEach döngüsü ile de dosyaları mail nesnesine, attachmet olarak ekliyorum.
Şimdi buraya kadar bir sorun yok. Asıl sorun bu işlemlerden öncesinde yer alıyor.
NOT: Bende mail gönderme kodları overload metod olarak yer alıyor. Farklı parametreler alan 5 farklı mail gönderme işlemi var. Mesela bir metot örnekteki gibi string türünde yol değişkeni alırken, başka bir metot Attachment türünde parametre alıyor. Farklı projeler için farklı yöntemler olabiliyor.
Mail Attachmet Seçmek
Bunun için bir kaç yöntem var.
- Kod ile oluşturulan dosyalardan seçmek
- Dosyaları OpenFileDialog ile seçmek.
Ben bu metodu hazırlarken ihtiyacım olan şey kod ile ürettiğim rapor dosyalarını maile eklemek idi. Zaten mail gönderme işlemini en çok, düzenli aralıklarda alınan raporları ilgili kişilere gönderme işlemi için kullanıyorum.
Yani rapor dosyası kod ile üretiliyor. Bir klasöre kaydediliyor. Mail gönderilirken rapor dosyasını kaydettiğim klasöre bakıyor ve oradaki dosyaların yollarını alarak maile attachment olarak ekliyor.
Dosyaları kod ile oluşturulan dosyalardan seçmek
Öncelikle hazırladığınız dosyaları bir klasöre kaydedin. Kaydetme işlemini tamamladıktan hemen sonra yollarını bir değişkene, aralarına bir ayraç koyarak arka arka yazın. Aşağıdaki gibi…
İlk dosyayı kaydettiniz, kaydedilen yolu attach değişkenine eklediniz. İkinci dosyayı kaydettiniz, kaydedilen yolu attach değişkenine eklediniz. Üçüncü dosyayı kaydettiniz, kaydedilen yolu attach değişkenine eklediniz. Bu yolları aralarına bir ayraç koyarak eklediniz.
string uretilen_dosya_yolu = ""; // ürettiğiniz bir dosyanın yolu // // dosyayı ürettiniz ve uretilen_dosya_yolu değişkenine atamasını yaptınız. // string attach += uretilen_dosya_yolu + "/";
Bunu yaptıktan sonra attach değişkenine mail gönderme metoduna parametre olarak gönderin. Değişkenin içeriği aşağıdaki gibi görünmeli. (BreakPoint kullanarak yada bir messagebox ile kontrol edebilirsiniz.)
string attach = "C:\\Attach\\excel 1.xlsx/C:\\Attach\\excel 2.xlsx/C:\\Attach\\word 1.xlsx/C:\\Attach\\word 2.xlsx/"
Burada C dizinine açtığımız Attach klasörü içerisinde mail göndermek istediğimiz 4 tane dosya var. Bu dosyaları yolları ile değişkene ekledik. Dosya yolları arasına da “/” karakterini koyduk. (Not: siz burada farklı bir karakter kullanabilirsiniz.) Bu değişkeni de mail gönderme metodumuzun “MailEkleri” parametresine gönderdik. İlk verdiğim koda bakarsanız, “MailEkleri” parametresine gelen mail dosya eklerini “/” karakterine göre split() ettik ve bir döngü ile aldığımız dosya yollarındaki dosyaları maile dosya eki olarak eklemiş olduk.
Dosyaları OpenFileDialog ile seçmek
Diyelim ki OpenFileDialog kullanarak mailde gönderilecek attachment ‘lerin kullanıcı tarafından seçilmesini istiyorsunuz.
Hemen yukarıdaki bağlantıya tıklayarak OpenFileDialog dersime gidin ve orada OpenFileDialog penceresinde multi select özelliğinin nasıl açıldığını görün. OpenFileDialog ‘un multiselect özelliğini aktif ettikten sonra, OpenFileDialog ile tek seferde birden fazla dosya seçebilirsiniz.
MultiSelect özelliği aktif değilken seçtiğimiz dosyanın yolunu;
OpenFileDialog file = new OpenFileDialog() file.ShowDialog(); string path = file.FileName;
şeklinde alabiliyorduk. Şimdi MultiSelect özelliği açıkken seçtiğimiz tüm dosyaların yollarını nasıl alacağımızı görelim.
OpenFileDialog file = new OpenFileDialog() file.MultiSelecet = True; file.ShowDialog(); string[] paths = file.FileNames;
Aradaki farkı görebiliyorsunuz değil mi? İlk halinde tek bir string dönüyordu ama ikinci halinde bir dizi dönüyor. Yani seçilen tüm dosyaların tam yollarını almış olduk.
Şimdi bunu nasıl kullanacağız?
Eğer mail gönderme metodunu değiştirmek istemiyorsanız;
for (int i = 0; i < paths.Count(); i++) { string dosya_ekleri = paths[i] + "/"; }
örnekteki gibi bir for döngüsü ile paths[] dizisindeki dosya yollarını aralarına “/” koyarak ve uç uça ekleyerek metodun istediği şekle getirebilirsiniz.
Ya da metodun “string MailEkleri” parametresini “string[] MailEkleri” olarak değiştirip elinizdeki diziyi direk parametre olarak verebilirsiniz. Bunu yaptığınızda mail gönderme metodundaki split() olan satırı kaldırabilirsiniz. ForEach satırındaki “sonuc1” değişkeni yerinde direk olarak “MailEkleri” değişkenini yazabilirsiniz.
NOT: Eğer parametreyi değiştirirseniz bu metodu kullandığınız her yeri metoda göre düzenlemeniz gerekecektir. Ya da Overload Metod haline getirmeniz gerekecektir.
C# Mail Gönderme İşlemleri – Attachment Ekleme dersimde bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersi gerekli görmediğim için Github projeme eklemedim. Çünkü bir işlemi anlatmak için değil bilgi ve tavsiyeler vermek için yazdım.
Sağlıcakla ve takipte kalın.