Bu makalemizde ASP.NET ve C# ile SMTP server üzerinden mail gönderme kodlarınız yazacağız.
Öncelikle yeni bir ASP sayfası açıyoruz istediğiniz dizaynı yaptıktan sonra forma 3 tane textBox, 1 tane Label ve 1 tane de buton oluşturuyoruz,  TextBox’ un adları : ” txtKonu, txtMesaj ve txtEmail”. Label’in  adını txtSonuc yapıyoruz. txtKonu’ya oluşturulan formadan konuyu giriyoruz, txtMesaj’ a  gönderilecek mesajı yazıyoruz, txtEmail’ e ise gönderen kişinin mail adresi yazılacak. txtSonuc label’ine de maili gönder butonuna bastıktan sonra hata var ise  catch yapısından dönen sonuç görüntülenecek. Aşağıdaki kodu oluşturduğunuz butonun click event’ ine yapıştıryoruz. Bu kodlar % 100 çalışmaktadır.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using System.Net.Mail;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnGonder_Click(object sender, EventArgs e)
{
try
{
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(“smtp mail sunucunuz”);
smtp.UseDefaultCredentials = true;
smtp.EnableSsl = false;
smtp.Port = 587;
System.Net.NetworkCredential cred = new System.Net.NetworkCredential(“mail nereye gidecek”, “gidecek mail şifresi”);
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
smtp.Credentials = cred;
mail.Priority = MailPriority.High;
mail.To.Add(“mail gidecek diğer adres”);//isteğe bağlı
mail.To.Add(“mail gidecek diğer adres 2″);//isteğe bağlı
mail.From = new System.Net.Mail.MailAddress(“mail nereye gidecek”);
mail.Subject = txtKonu.Text;
mail.Body = (txtMesaj.Text + ” gönderen kişinin e-maili:” + txtEmail.Text);
mail.IsBodyHtml = false;
smtp.Send(mail);
}
catch (Exception ex)
{
txtSonuc.Text = ex.Message;
}
}
}
Kolay Gelsin.
Mansur İşçel

asp.net uygulamanız içinde ki dropdownlistinize yeni bir eleman (option) eklemek istediğinizde , bunu window.open() ile açacağınız yeni bir pencere ile gerçekleştirmek istiyorsanız , açılan pencerede kaydet butonuna  close_form() adında bir javascript fonksiyonu ile eşleştirip  bu fonksiyon içierisine aşağıdaki kod blogunu yazarak ana sayfadaki drıpdownlist nesnesine erişerek ekleme işlemini gerçekleştirebilirsiniz.

<script>

function close_form()

{

try {

var opt = new window.opener.document.createElement(“option”);

window.opener.document.getElementById(‘dropdownlist_subeler’).options.add(opt);

opt.text = document.getElementById(‘txt_subeler’).value;

opt.value = document.getElementById(‘txt_subeler’).value; window.close();

}

catch(err)

{

alert(err);

}

}

</script>

Selamlar arkadaşlar,
Bir windows servisi başarıyla yazdınız ve uygulamanın kurulumunu yapacak setup dosyasınıda eklediğinizi varsayıyoruz.
Şimdi yazdığımız windows  servisi kullanıcı bilgisayarlarına yükledikten sonra otomatik olarak çalışması lazım. yani kullaıcı kurulumu tamamladıktan sonra servis listesine gidip buradan çalıştırmaması istemek biraz abes kaçar. bunun için yapmamız gereken  serviceinstaller’da kod yazdığımız yere gidip,
public ProjectInstaller()
{
InitializeComponent();
this.Committed += ProjectInstaller_Committed;
}
void ProjectInstaller_Committed(object sender, InstallEventArgs e)
{
var controller = new ServiceController(“servisiminadı”);
controller.Start();
}
yukarıda koyu olarak yazdığımız yerleri eklememiz yeterli olacaktır.
İyi Çalışmalar

Selamlar arkadaşlar,
Bir windows servisi başarıyla yazdınız ve uygulamanın kurulumunu yapacak setup dosyasınıda eklediğinizi varsayıyoruz.Şimdi yazdığımız windows  servisi kullanıcı bilgisayarlarına yükledikten sonra otomatik olarak çalışması lazım. yani kullaıcı kurulumu tamamladıktan sonra servis listesine gidip buradan çalıştırmaması istemek biraz abes kaçar. bunun için yapmamız gereken  serviceinstaller’da kod yazdığımız yere gidip,
public ProjectInstaller(){InitializeComponent();this.Committed += ProjectInstaller_Committed;}void ProjectInstaller_Committed(object sender, InstallEventArgs e){var controller = new ServiceController(“servisiminadı”);controller.Start();}yukarıda koyu olarak yazdığımız yerleri eklememiz yeterli olacaktır.
İyi Çalışmalar

Merhabalar,

Uygulama geliştirirken kendinize ait basecontroller yazmışsınızdır ve hangi sayfada kullanacaksınız mutlaka sayfa bu kontrolleri register etmeniz gerekir. Yada AjaxControlToolKit’i kullanıyorsunuzdur ve yine hangi sayfa kullanacak iseniz yine bu dll i sayfada register etmeniz gerekir. Tabi bu tanımlamayı web.config üzerinde yapmamış iseniz. Her sayfada register etmek yerine web.config te Pages nod ‘unda bir kere register eder iseniz uygulamanıza eklediğiniz her sayfada artık ekli olarak gelecektir. Bunun için web.configte aşağıdaki düzeltmeyi yapmanız gerekmektedir.

<compilation debug=”true” strict=”false” explicit=”true”>

   <assemblies>
      ...
      <add assembly="AjaxControlToolkit"/>
  </assemblies>
</compilation>
  <pages>
   ...
   <controls>
       <add assembly="AjaxControlToolkit"
 namespace="AjaxControlToolkit" tagPrefix="cc1" />   �
    </controls>
  </pages>

Bol kodlu günler :)

Hata mesajını alma hikayemiz şöyle. Web uygulamamızda SharePoint:SPGridView üzerinde <asp:ButtonField nesnesi yardımı ile belirleyeceğimiz bir dosyayı yeni pencerede açmaya çalıştık ve gridimiz updatepanel içerisinde . Dosya açma örnek kodu :

// .ascx bölümü
<SharePoint:SPGridView runat=”server” CssClass=”ms-formbody” ID=”grid_verigoster” AutoGenerateColumns=”false” >
<asp:ButtonField Text=”DosyayiAc” CommandName=”dosyaac” buttontype=”Link”/>
</SharePoint:SPGridView>

// .ascx bölümü
// .cs bölümü

void grid_Selected_RowCommand(object sender, GridViewCommandEventArgs e){
if (e.CommandName == “dosyaac”)
{
string deneme = “
http://www.denemesayfa.com/DosyaKalem/40/test.xls“;
            Response.Write(“<script>”);
            Response.Write(“window.open(‘” + deneme + “‘)”);
            Response.Write(“</script>”);

}
}

// .cs bölümü
bu şekilde uygulamayı çalıştırdığımız da hata mesajı ile karşılaştık.

Çözüm
çözüm için </asp:UpdatePanel> dan önce PostBackTrigger eklemeniz yeterli olacaktır.

<Triggers>
           <asp:PostBackTrigger ControlID=”Button1″ />
        
</Triggers>
    
</asp:UpdatePanel>

Bir Önceki Makalemizde tek bir karaktere göre ve string bir ifadeye göre split kullanımına deyinmeye çalışmıştık.  Bu yazımızda ise yine tek karaktere göre ama birden fazla belirterek , yani “+” gördüğünde yada “-” gördüğünde yada “*” gördüğünde ayırma işlemini uygula şeklinde bir örnek yapacağız.


 char[] ayiraclar = new char[] { '+', '-','/','*' };
string ifade ="3x+4y-5z";
string[] parcalar= ifade.Text.Split(ayiraclar ,
                             StringSplitOptions.RemoveEmptyEntries); // StringSplitOptions.RemoveEmptyEntries bu ifade boş olan değeleri listeye atma anlamına geliyor
for (int i = 0; i < parcalar.Length; i++)
{
          Console.WriteLine(parcalar[i].ToString());
}

Çıktı olarak
3x
4y
5z

string bir ifadedeki boşlukları yada tek karaktere göre ayırma işlemi

using
 System;

class Program
{
static void Main()
{
string s = "bu cumleyi bol";
string s1 = "bu+cumleyi+bol";

//
// boşluğa göre parçalama.
//
string[] kelimeler = s.Split(' ');
foreach (string kelime in kelimeler )
{
Console.WriteLine(kelime );
}

//
// "+" karakterine göre parçalama.
//

string[] kelimeler1 = s1.Split('+');
foreach (string kelime in kelimeler1 )
{
Console.WriteLine(kelime );
}

}
}

birden çok karaktere göre bölme işlemi yada string bir ifadeye göre de diyebiliriz.

using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string deger= "elma\r\narmut\r\nportakal\r\nkiraz";
//
// string bir ifadeye göre yada birden çok karaktere göre bölme.
//
string[] kelimeler = Regex.Split(deger, "\r\n");

foreach (string kelime in kelimeler )
{
Console.WriteLine(kelime );
}
}
}

Sharepoint te özelleştirdiğiniz kaydetme fonksiyonunda o anda eklemekte olduğunuz  elemanın ID sini alıp ona göre işlem yapmak istiyorsanız ListItem.ID den yararlanabilirsiniz.

protected override bool SaveItem()
{
      ......
     // kaydetme incesi yapılacak işlemler    

    bool sonuc= base.SaveItem();  // kaydetme işlemi

    // kaydetme sonrası yapılacak işler
      ......
    int eklenenElemanID = ListItem.ID; // Bu ID yardımı ile eklediğiniz eleman ile ilişki diğer işlemlerinizi gerçekleştirebilirsiniz.
}

Uygulama geliştirirken OOP prensiplerine yaklaştıkça nesneler arasındaki ilişkilerin önemi de gitgide artıyor.  Ben de tasarım desenlerine verdiğim kısa arada çok karıştırılan iki kavramdan bahsetmek istiyorum. Nesneler arasındaki iki ilişki türü : Aggregation, Association

Aggregation : Bu tür ilişki de nesnelerin yaşam döngüleri birbirlerinden ayrıdır. Bir nesne diğerinden bağımsız olarak da yaşamını sürdürebilir. Yani aralarında bir sahiplik ilişkisi (has-a ) vardır. Örneğin Dizüstü Bilgisayarınız ile onun çantası arasında böyle bir ilişki vardır. Çantayı ayrı olarak ya da laptop’u ayrı olarak düşünebiliriz. Yaşam döngüleri ortak değildir. UML diagramında gösterimi ve koda dökülmüş bir örneği aşağıdaki gibidir.

public class Canta
{

}
public class Laptop {
private Canta _canta;
public Laptop(Canta canta)
{
_canta = canta;
}
}

Composition : Bu tür ilişki de nesnelerin yaşam döngüleri birbirleriyle bağlantılıdır. Bir nesne diğerinden bağımsız olarak kullanılamaz. Aralarındaki ilişki parçası olma(is-a-part-of ) ilişkisidir. Az önceki örneğimizden gidersek dizüstü bilgisayarımız ile ekranı arasında bu tarz bir ilişki vardır. UML diagramında gösterimi ve koda dökülmüş bir örneği aşağıdaki gibidir.

public class Ekran
{

}
public class Laptop
{

Ekran _ekran = new Ekran();
}


private double mesafeHespla(Point from, Point to)
{
    double rad = 6371; //Km cinsinden Dünyanın yarı çapı

      double p1X = from.X / 180 * Math.PI;
    double p1Y = from.Y / 180 * Math.PI;
    double p2X = to.X / 180 * Math.PI;
    double p2Y = to.Y / 180 * Math.PI;

    return Math.Acos(Math.Sin(p1Y) * Math.Sin(p2Y) +
        Math.Cos(p1Y) * Math.Cos(p2Y) * Math.Cos(p2X - p1X)) * rad;
}
© 2010 bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP Suffusion WordPress theme by Sayontan Sinha