ASP.NET ile mail gönderimi

DNS ve SMTP üzerinden mail gönderimi

Bu yazımızda, asp.net ile mail gönderiminden bahsedeceğim.

2 farklı şekilde bu servisleri kullanabilirsiniz. Birisi DNS üzerinden mail gönderimi, diğeri de SMTP üzerinden mail gönderimi.

DNS ile mail gönderimi:

Dns üzerinden mail gönderimi, serverdan bağımsız yani herhangi bir site emailine bağlı olmadan mail gönderim işlemidir. İnternet bağlantınız üzerinden o an mevcut bulunduğunuz IP adresini kullanarak gönderim yaparsınız. DNS üzerinden internet bağlantınızın hızı ölçüsünde sınırsızca gönderimlerinizi yapabilirsiniz.

Dns üzerinden mail gönderimi için şöyle bir benzetme yapabiliriz. Postayla yollanan bir mektup tam adrese kişisine gider ama reklam için el buroşürü dağıtacak kişiler gelişi güzel çok adetlerde 1 yerine 1000 adet dağıtım yapar. Biz de Dns üzerinden mail gönderimini gönderilen yüksek adetler sebebiyle dağıtılan el broşürlerine benzetebiliriz.

SmtpClient istemci = new SmtpClient("mail.orneksite.com");
// Sitenin Mail Server Adresi Girdik.
MailAddress gonderen = new MailAddress("gonderen@domain.com");
// Hangi mail adresi üzerinden göndereceksen yazdık.
MailAddress alici = new MailAddress("alici@orneksite.com");
//Göndereceğimiz kişiyi yazdık.
MailMessage mail = new MailMessage(gonderen, alici);
//Yeni Mail Mesajı oluşturduk. Gönderilecek, gönderilen adresi yazdık
mail.Subject = TextBoxKonu.Text;
// Mailin Konusu ekledik.
mail.Body = "İçerik : " + TextBoxMesaj.Text;
// Mailin Body kısmını yani İçeriği ekledik.
mail.IsBodyHtml = true;
//Mail de html kod kullanılabilir yaptık.
istemci.Send(mail);

SMTP üzerinden mail gönderimi:

Smtp üzerinden mail gönderimi ile web sitenize bağlı olan email adresiniz üzerinden gönderim yaparsınız. Sizlere gelen maillerin Bankalar - Teknoloji Marketler - Kurumsal İşletmelerin düzenli maillerin büyük bir geneli firmaların SMTP üzerinden gelmektedir. Bu şekilde yapacağınız mail gönderimlerinde, gönderdiğiniz mailler kullanıcıların gelen kutusuna ulaşır ve herhangi bir blokasyon yaşanmaz.

Maillerinizin sağlıklı olarak karşı sunuculara ulaşmasını isterseniz tavsiyem bu modülü kullanmanızdır. Smtp üzerinden  gönderimlerde dikkat edilmesi gereken en önemli konu, server hizmeti aldığınız firmadan günlük gönderim adedinizi öğrenmenizdir.

Dikkat edilmesi gereken bir başka çok önemli husus da for döngüsü ile bir anda toplu mail göndermemeniz gerektiğidir. Yoksa mail sunucunuzun IP leri blakclist e girer ve mail gönderimlerinde siz ve sizin serverinizda bulunan tüm domainler sıkıntı yaşarlar.

DNS üzerinden mail gönderimi için çok öncelerinde bir sınıf yazmıştım.

Kullanılacak sabit bilgiler, web.config ten okunuyor. Öncelikle bu sabit bilgileri web.config teki <appSettings>...</appSettings> altına ekliyoruz.

 <appSettings>
<!--# Eposta gönderme ayarları-->
<add key="epostaFromAddress" value="noreply@algoritmalar.com " />
<add key="epostaReply" value="noreply@algoritmalar.com " />
<add key="epostaFromName" value="Algoritmalar.com" />
<add key="epostaPort" value="587" />
<!-- ayarlar -->
<add key="epostaServer" value="mail.algoritmalar.com" />
<add key="epostaUser" value="noreply@algoritmalar.com" />
<add key="epostaPass" value="sifre" />
<add key="epostaTo" value="noreply@algoritmalar.com"/>
<add key="epostaTo2" value="daltinkurt@hotmail.com"/>
</appSettings>

 Sınıfımız:

public class Eposta
{
  public static readonly string strFromAddress = ConfigurationManager.AppSettings["epostaFromAddress"].ToString();
  public static readonly string strFromName = ConfigurationManager.AppSettings["epostaFromName"].ToString();
  public static readonly string strServer = ConfigurationManager.AppSettings["epostaServer"].ToString();
  public static readonly string strUser = ConfigurationManager.AppSettings["epostaUser"].ToString();
  public static readonly string strPass = ConfigurationManager.AppSettings["epostaPass"].ToString();
  public static readonly string strReplyTo = ConfigurationManager.AppSettings["epostaReply"].ToString();
  public static readonly string strPort = ConfigurationManager.AppSettings["epostaPort"].ToString();

  string konu;
  string mesaj;
  MailAddressCollection to;
  MailAddressCollection cc;
  MailAddressCollection bcc

  private MailAddressCollection To
  {
    get { return to; }
    set { to = value; }
  }

  private MailAddressCollection Bcc
  {
    get { return bcc; }
    set { bcc = value; }
  }
   
  private MailAddressCollection Cc
  {
    get { return cc; }
    set { cc = value; }
  }

  public void AddTo(string eposta)
  {
    if (To == null)
      To = new MailAddressCollection();
    To.Add(eposta);
  }
  public void AddBcc(string eposta)
  {
    if (Bcc == null)
      Bcc = new MailAddressCollection();
    Bcc.Add(eposta);
  }
  public void AddCc(string eposta)
  {
    if (Cc == null)
      Cc = new MailAddressCollection();
    Cc.Add(eposta);
  }

  public string Mesaj
  {
    get { return mesaj; }
    set { mesaj = value; }
  }

  public string Konu
  {
    get { return konu; }
    set { konu = value; }
  }

  public void Gonder()
  {
    try
    {
      MailMessage msg = new MailMessage();
      msg.BodyEncoding = System.Text.Encoding.UTF8;
      msg.IsBodyHtml = true;

      msg.Subject = Konu;
      msg.Body = Mesaj;
      msg.ReplyTo = new MailAddress(strReplyTo);

      msg.From = new MailAddress(strFromAddress, strFromName);

      if (To != null)
        foreach (MailAddress mail in To)
          {
            msg.To.Add(mail);
          }

      if (Cc != null)
        foreach (MailAddress mail in Cc)
        {
          msg.CC.Add(mail);
        }

      if (Bcc != null)
        foreach (MailAddress mail in Bcc)
        {
          msg.Bcc.Add(mail);
        }

      int portNo = Convert.ToInt32(strPort);
      SmtpClient smtp = new SmtpClient(strServer, portNo);
      NetworkCredential nc = new NetworkCredential(strUser, strPass);
      smtp.Credentials = (ICredentialsByHost)nc.GetCredential(strServer, portNo, "Basic"); 
      // AuthTypes: "Basic", "NTLM", "Digest", "Kerberos", "Negotiate"

      smtp.Send(msg);
    }
    catch (Exception)
    {
      throw;
    }
  }
}

Tabii ki bu sınıfı kullanabilmek için üst tarafa şu satırları eklemelisiniz:

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Mail;
using System.Net;
using System.Configuration;
using System.Xml;
using System.Web;

Programımızda bu sınıfı kullanabilmek için yapmamız gerekenler ise şunlar:

Eposta myEposta = new Eposta();
myEposta.Konu = "Algoritmalar.com | Mesaj gönderildi";
myEposta.Mesaj =
  string.Format(@"<p><b>{0}</b> ({1}) şu mesajı yazdı:</p>
  <hr/>
  {2}
  <hr/>
  Algoritmalar.com", 
  txtAdSoyad.Text,
  txtEposta.Text,
  editor.Value);
string eposta = ConfigurationManager.AppSettings["epostaTo"].ToString();
myEposta.AddTo(eposta);
myEposta.Gonder();

Proje dosyası için buraya tıklayabilirsiniz.

Herkese kolay gelsin.

Not: http://www.coolsender.com/ adresinden bazı alıntılar yapılmıştır.