Asp.NET - C# HTML Şablonu Formatında Mail Gönderme



Merhaba,

Mail gönderme işlemi biliyorsunuz ki düz yazı biçiminde yapılabileceği gibi biraz daha özelleştirerek maile daha kurumsal bir yapı kazandırarak da gönderilebilir. Benim uğraştığım projede müşteriye gitmesi gereken mail servis detayının fatura görünümünde olmasıydı.

Hemen başlamak gerekirse ilk önce Mail.html adında bir düz html sayfa oluşturup gerekli tasarımı yaptım.







Burada göreceğiniz gibi üstte bir logo var. Bu logoyu hostinge yükledim ve oradan çekiyorum.
Kısım başlıkları ve alan başlıkları var. [title] [mail] gibi alanlarımız da mail gidecek müşterinin bilgilerini çekeceğimiz alanlarımız. Burada düz yazı olarak ekliyoruz. Html sayfamız bu kadar.

Sonrasında bir mail.aspx sayfası ekliyoruz.

Burada göreceğiniz üzere Mail.html sayfamızın aynı tasarımını buraya kopyaladık. ancak [title [mail] alanlarımızın yerini Toolbox tan eklediğimiz Label'larımız alıyor. Label'larımızın id bilgilerini lbltitle, lblmail olarak değiştiriyoruz.

Artık işimiz c3 tarafında mail gönderme işlemine geldi. Yukarıda mail gönder butonumuz ve hata oluştuğunda hata mesajını yazdıracağımız 2 ader label var. Butona çift tıklayıp click olayını oluşturuyoruz.

Öncelikle hangi müşteriye mail göndereceğimiz bilgisini seçtiğimiz sayfadan mail.aspx sayfasına geldiğimizde mail gönderilecek müşterinin bilgilerini çekmek için gerekli olan sorgulama işlemini yaptırıyoruz. Page Load olayına bu sorgumuzu yazıyoruz. Name space bilgilerine System.Net ve System.Net.Mail ve diğer namespace bilgilerini eklemeyi unutmayalım.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Net.Mail;
using System.Collections.Specialized;
using System.IO;
public partial class Servisler_mail : System.Web.UI.Page
{
    serviceappdbEntities db = new serviceappdbEntities();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["ID"]!=null && Request.QueryString["ID"]!="")
            {
                int id =Convert.ToInt32(Request.QueryString["ID"].ToString());
                var sorgu = (from s in db.Services
                             join c in db.Customers on
                             s.CustomerID equals c.CustomerID
                             join st in db.ServiceTypes on
                             s.TypeID equals st.TypeID
                             where c.CustomerID == s.CustomerID
                             join p in db.Products on
                             s.ProductID equals p.ProductID
                             join ss in db.ServiceStatus on
                             s.StatusID equals ss.StatusID
                             where s.ID==id
                             select new
                             {
                                 s.ID,
                                 s.CustomerID,
                                 s.ProductID,
                                 s.Date,
                                 s.Definition,
                                 s.BegTime,
                                 s.EndTime,
                                 s.Net,
                                 st.Name,
                                 c.Code,
                                 c.Email,
                                 c.Phone,
                                 c.Title,
                                 pName=p.Name,
                                 p.Info,
                                 servisdurum=ss.Name
                             }).ToList(); // sorgumuzu oluşturduk gerekli bilgileri aldık ve foreach ile labellarımıza atadık.
                foreach (var item in sorgu)
                {
                    lbltitle.Text = item.Title;
                    lblmail.Text = item.Email;
                    lblphone.Text = item.Phone;
                    lbldate.Text = item.Date.ToString();
                    lblbegtime.Text = item.BegTime.ToString();
                    lblendtime.Text = item.EndTime.ToString();
                    lblnet.Text = item.Net;
                    lblname.Text = item.Name;
                    lblinfo.Text = item.Info;
                    lbldefinition.Text = item.Definition;
                    lblservisdurum.Text = item.servisdurum;
                }
            }
        }
    }


Şimdi ise asıl görevi yapacak olan mail gönder butonumuzun kodlarını ekleyelim.

protected void btnMailGonder_Click1(object sender, EventArgs e)
        MailMessage Msg = new MailMessage();
        Msg.From = new MailAddress("mailiniz@domain.com");
        Msg.To.Add(lblmail.Text);//Mesajın gideceği müşterinin mail adresi Sayfa yüklenirken lblmail a atmıştık oradan çekiyoruz.
        StreamReader reader = new StreamReader(Server.MapPath("~/Servisler/Mail.html")); // Oluşturmuş olduğumuz Mail.html dosyanın yolu
        string readFile = reader.ReadToEnd();
        string StrContent = "";
        StrContent = readFile;
        //Burada html sayfada oluşturmuş olduğumuz [title],[mail] gibi alanları mail.aspx tarafında oluşturduğumuz lbltitle ve lblmail alanları ile eşleştirip değiştirmesini söylüyoruz.
        StrContent = StrContent.Replace("[title]", lbltitle.Text);
        StrContent = StrContent.Replace("[mail]", lblmail.Text);
        StrContent = StrContent.Replace("[phone]", lblphone.Text);
        StrContent = StrContent.Replace("[date]", lbldate.Text);
        StrContent = StrContent.Replace("[name]", lblname.Text);
        StrContent = StrContent.Replace("[info]", lblinfo.Text);
        StrContent = StrContent.Replace("[begtime]", lblbegtime.Text);
        StrContent = StrContent.Replace("[endtime]", lblendtime.Text);
        StrContent = StrContent.Replace("[net]", lblnet.Text);
        StrContent = StrContent.Replace("[definition]", lbldefinition.Text);
        StrContent = StrContent.Replace("[servisdurum]", lblservisdurum.Text);
        Msg.Subject = lblbegtime.Text + " - " + lblendtime.Text + " Tarihli Hizmet Detay - Fatura";//mesaj konumuz yine labellardan çektiriyoruz.
        Msg.Body = StrContent.ToString();
        Msg.IsBodyHtml = true;//mail gövdesinde html e izin veriyoruz.
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.domain.com";
        System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
        NetworkCred.UserName = "mailiniz@domain.com";
        NetworkCred.Password = "MailŞifre";
        smtp.UseDefaultCredentials = true;
        smtp.Credentials = NetworkCred;
        smtp.Port = 587; //Port
        smtp.EnableSsl = false;
        try
        {
            smtp.Send(Msg); //Mail gönder
            lblGonderildi.Text = "Mail Başarı ile Gönderildi.";//Başarılı ise yaz
        }
        catch (Exception ex)
        {
            lblHata.Text = "Mail Gönderilirken Hata Oluştu! Tekrar Deneyin <br/> Hata Ayrıntıları :" + ex;// Hata var ise hata mesajı ve ayrıntıları.
        }
    }




Bu blogdaki popüler yayınlar

Youtube Oynatma Listesi (Playlist) Toplu Video İndirme

Asp.NET MVC Eğitimi (Örnek Proje )

Mozilla Firefox Yer İmlerinin Yedeğini Almak ve Geri Yüklemek !. ( Resimli Anlatım )