27 Mart 2017 Pazartesi
Twitter

Kullandığım E-Posta Gönderme Classı

İsteyenler benim classı kullanabilirler, örneklerle kullanımı yazının devamında...

Daha önceden http://www.daltinkurt.com/Icerik/129/ASP-NET-ile-mail-gonderimi.aspx adresinde eposta gönderme ile ilgili bir yazı yazmıştım.

Şimdi de bir arkadaşımın da isteği ile kullandığım eposta gönderme class ını sizlerle paylaşmak istedim.

İşte buyrun kullandığım class:

Merak etmeyin proje dosyalarını toplu halde indirebileceksiniz :)

namespace DevrimAltinkurt
{
public class EPosta
{
    #region private
    string strFromAddress = "";
    string strFromName = "";
    string strServer = "";
    string strUser = "";
    string strPass = "";
    string strReplyTo = "";
    int portNo = 0;
    int ssl = 0;

    string konu;
    string mesaj;

    MailAddressCollection to;
    MailAddressCollection cc;
    MailAddressCollection bcc;
    #endregion

    #region public

    public string StrFromAddress
    {
        get { return strFromAddress; }
        set { strFromAddress = value; }
    }

    public string StrFromName
    {
        get { return strFromName; }
        set { strFromName = value; }
    }

    public string StrServer
    {
        get { return strServer; }
        set { strServer = value; }
    }

    public string StrUser
    {
        get { return strUser; }
        set { strUser = value; }
    }

    public string StrPass
    {
        get { return strPass; }
        set { strPass = value; }
    }

    public string StrReplyTo
    {
        get { return strReplyTo; }
        set { strReplyTo = value; }
    }

    public int PortNo
    {
        get { return portNo; }
        set { portNo = value; }
    }

    public bool Ssl
    {
        get { return (ssl == 1) ? true : false; }
        set { ssl = value ? 1 : 0; }
    }

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

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

    #endregion

    #region constructors

    /// <summary>
    /// Bilgiler web.config ten okunacak
    /// </summary>
    public EPosta()
    {
        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["epostaFromAddress"].ToString()))
        {
            strFromAddress = ConfigurationManager.AppSettings["epostaFromAddress"].ToString();
            strFromName = ConfigurationManager.AppSettings["epostaFromName"].ToString();
            strServer = ConfigurationManager.AppSettings["epostaServer"].ToString();
            strUser = ConfigurationManager.AppSettings["epostaUser"].ToString();
            strPass = ConfigurationManager.AppSettings["epostaPass"].ToString();
            strReplyTo = ConfigurationManager.AppSettings["epostaReply"].ToString();
            portNo = Convert.ToInt32(ConfigurationManager.AppSettings["epostaPort"].ToString());

            try
            {
                ssl = Convert.ToInt32(ConfigurationManager.AppSettings["epostaSSL"].ToString());
            }
            catch (Exception)
            {
                ssl = 0;
            }
        }
    }

    /// <summary>
    /// Bilgileri elle ayarla
    /// </summary>
    /// <param name="strFromAddress"></param>
    /// <param name="strFromName"></param>
    /// <param name="strServer"></param>
    /// <param name="strUser"></param>
    /// <param name="strPass"></param>
    /// <param name="strReplyTo"></param>
    /// <param name="portNo"></param>
    public EPosta(string strFromAddress, string strFromName, string strServer,
                    string strUser, string strPass, string strReplyTo, int portNo, bool ssl)
    {
        this.strFromAddress = strFromAddress;
        this.strFromName = strFromName;
        this.strServer = strServer;
        this.strUser = strUser;
        this.strPass = strPass;
        this.strReplyTo = strReplyTo;
        this.portNo = portNo;
        this.Ssl = ssl;
    }

    #endregion

    #region private methods

    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; }
    }

    #endregion

    #region public methods
    public void EkleTo(string eposta)
    {
        if (To == null)
            To = new MailAddressCollection();
        To.Add(eposta);
    }

    public void EkleBcc(string eposta)
    {
        if (Bcc == null)
            Bcc = new MailAddressCollection();
        Bcc.Add(eposta);
    }
    public void EkleCc(string eposta)
    {
        if (Cc == null)
            Cc = new MailAddressCollection();
        Cc.Add(eposta);
    }

    public void Gonder()
    {
        try
        {
            int mailAdet =
                (To == null ? 0 : To.Count)
                +
                (Bcc == null ? 0 : Bcc.Count)
                +
                (Cc == null ? 0 : Cc.Count);
            if (mailAdet == 0)
                throw new Exception("Gönderilecek eposta adresi belirtilmedi");

            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);

            SmtpClient smtp = new SmtpClient(strServer, portNo);
            smtp.Timeout = 1000000000;
            //smtp.UseDefaultCredentials = false;
            NetworkCredential nc = new NetworkCredential(strUser, strPass);
            smtp.Credentials = (ICredentialsByHost)nc.GetCredential(strServer, portNo, "Basic"); // AuthTypes: "Basic", "NTLM", "Digest", "Kerberos", "Negotiate"
            //smtp.Credentials = nc;
            if (ssl == 1)
                smtp.EnableSsl = true;

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

Bu class ı kullanabilmek için şu namespaceleri tanımlıyoruz:

using System;
using System.Configuration;
using System.Net;
using System.Net.Mail;

Peki bu classı nasıl kullanabiliriz. 3 değişik şekilde kullanabilirsiniz.

1) Bilgileri web.config ten okuyarak:

try
{
    // bilgiler web.config ten okunacak
    EPosta eposta = new EPosta();

    eposta.Konu = txtKonu.Text;
    eposta.Mesaj = txtMesaj.Text.Replace(Environment.NewLine, "<br/>");

    eposta.EkleTo(txtTo.Text);

    eposta.Gonder();

    lblSonuc.Text = "Eposta gönderildi";
}
catch (Exception ex)
{
    lblSonuc.Text = ex.Message;
}

web.config e şu satırları ekliyoruz:

<appSettings>
 <!--# Eposta gönderme ayarları-->
 <add key="epostaFromAddress" value="abc@xyz.com"/>
 <add key="epostaReply" value="abc@xyz.com"/>
 <add key="epostaFromName" value="Devrim Altınkurt"/>
 <add key="epostaServer" value="mail.xyz.com"/>
 <add key="epostaSSL" value="0"/>
 <add key="epostaPort" value="1234"/>
 <add key="epostaUser" value="abc@xyz.com"/>
 <add key="epostaPass" value="sifre"/>
 <add key="epostaTo" value="abc@xyz.com"/>
</appSettings>

2) Bilgileri constructordan vererek:

try
{
    // bilgileri elle ver
    EPosta eposta = 
        new EPosta("abc@xyz.com", "Devrim Altınkurt", 
                    "mail.xyz.com", "abc@xyz.com", 
                    "sifre", "abc@xyz.com", 1234, false);

    eposta.Konu = txtKonu.Text;
    eposta.Mesaj = txtMesaj.Text.Replace(Environment.NewLine, "<br/>");

    eposta.EkleTo(txtTo.Text);

    eposta.Gonder();

    lblSonuc.Text = "Eposta gönderildi";
}
catch (Exception ex)
{
    lblSonuc.Text = ex.Message;
}

3) Bilgileri public properties aracılığıyla vererek:

try
{
    // bilgileri elle veriyoruz
    EPosta eposta =
                new EPosta
                {
                    StrFromAddress = "abc@xyz.com",
                    StrFromName = "Devrim Altınkurt",
                    StrServer = "mail.xyz.com",
                    StrUser = "abc@xyz.com",
                    StrPass = "sifre",
                    StrReplyTo = "abc@xyz.com",
                    PortNo = 1234
                };
    eposta.Konu = txtKonu.Text;
    eposta.Mesaj = txtMesaj.Text.Replace(Environment.NewLine, "<br/>");

    eposta.EkleTo(txtTo.Text);

    eposta.Gonder();

    lblSonuc.Text = "Eposta gönderildi";
}
catch (Exception ex)
{
    lblSonuc.Text = ex.Message;
}

Eposta gönderme classını ve örnek kodları buradan indirebilirsiniz:

Güle güle kullanın :)

Değerlendirme

Yazım dilinin sadeliği ve anlaşılabilirliği Puan: 5,00 (1 oy)
Yazıdaki kodların kalitesi Puan: 5,00 (1 oy)
İhtiyaca cevap verme Puan: 4,50 (1 oy)
Tavsiye edilebilirlik Puan: 5,00 (1 oy)
Genel değerlendirme Puan: 4,75 (1 oy)
Puanlamalar 5 üzerindendir.
  • Site Yorumları
  • Facebook Yorumları Facebook Yorumları
Yeni yorum yaz Toplam: 7, Onay bekleyen: 0.
  1. arslan

    başarılı olmuş... <a href=`http://graphicmail.com.tr/toplu-mail-nedir`>Toplu mail</a> versiyonu da var mıdır ?

  2. Devrim Altınkurt

    Bunlar kullanıcı adı ve şifrenin servera nasıl gönderileceğini belirten standartlar. Basic: SSL gerektirmektedir ve Base64 ile encode edilmiş virgül ile ayrılmış kullanıcı adı ve parola bilgilerini kapsar. Digest: Sunucuya gönderilmeden önce kullanıcı adı ve parola MD5 ile şifrelenir. NTLM: Microsoft`un hazırladığı standart. Windows ortamı için geliştirilmiştir. vb.. vb.. detaylar için bkz: Google.com :)

  3. Osman

    Hocam aşağıdaki kodda Basic ve diğer yetki türlerinin işlevi nedir? smtp.Credentials = (ICredentialsByHost)nc.GetCredential(strServer, portNo, `Basic`); // AuthTypes: `Basic`, `NTLM`, `Digest`, `Kerberos`, `Negotiate`

  4. ekrem

    şu anda kullandığım epsota classımı sizinkine göre değiştirerek kendime adapte edeceğimi burada belirtmek isterim. bununla beraber diğer kullanıcıların kendilerince düzenlemeleri gereken <add key=`epostaPort` value=`1234`/> ve ssl ile ilgili kısımlara dikkat çekmek isterim ;)

  5. Osman

    Çok faydalı kaynaklara ulaşıyoruz.