Mail Gönderme – .Net MVC

Bir çok web sayfasında yer alan İletişim kısmı genellikle ziyaretçilerin site sahibine erişmesi için kullanılır. Bazı siteler iletişim sayfasında sadece lokasyon ve iletişim bilgilerini bulundururken daha kurumsal olan ziyaretçinin site sahibiyle iletişime geçmesini sağlayacak olanaklar sunmaktır. Bunun en kolay yollarından bir tanesi de mesaj/mail göndermek için alanlarının yer almasıdır. Mail gönderme kısmını iki şekilde yapabilirsiniz. İlk olarak tomail vererek outlook vb. mail uygulamalarının açılmasını sağlayarak mail gönderilmesini sağlamak. Bu seçenekte kullanıcı hem siteden çıkmış hem de mail gönderme işlemi yapıyormuş gibi olacağından tercih edilmez.  İkinci alternatif olarak koddan bir buton tetiklenmesi ile mail gönderilmesidir. Bu yazıda .Net MVC controller’da mail gönderiminin nasıl yapıldığına değineceğim.

Bu iki şekilde yapılabiliyor.

Birincisi :

var fromAddress = “sendermail@gmail.com”;
// any address where the email will be sending
var toAddress = “tomail@gmail.com”;
//Password of your gmail address
const string fromPassword = “senderpassword”;
// Passing the values and make a email formate to display
string subject = “Subject”;
string body = “From: ” + fromAddress + “\n”;
body += “Email: ” + “” + “\n”;
body += “Subject: ” + “” + “\n”;
body += “Question: \n” + “” + “\n”;
// smtp settings
var smtp = new System.Net.Mail.SmtpClient();
{
smtp.Host = “smtp.gmail.com”;
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;
}
// Passing values to smtp object
smtp.Send(fromAddress, toAddress, subject, body);

 

İkinci seçenek ise WebMail kullanılmasıdır.

WebMail.SmtpServer = “smtp.gmail.com”;
WebMail.SmtpPort = 587;
WebMail.SmtpUseDefaultCredentials = true;
WebMail.EnableSsl = true;
WebMail.UserName = “sender@gmail.com”;
WebMail.Password = “senderpassword”;
WebMail.From = “Sender email address@gmail.com”;

//Send email
WebMail.Send(to: “tomailadress”, subject: “Subject”, body: “MailBody”, cc: “”, bcc: “”, isBodyHtml: true);

 

Bu iki şekilde mail gönderimini sağlayabilirsiniz.

 

Advertisements

Bir tarih aralığının hafta başlangıç ve bitiş tarihlerini bulma

Bugünün ait olduğu haftanın başlangıç ve bitiş tarihlerini alır. Hafta başlangıcı olarak Pazar günü bitişini de Cumartesi olarak set eder. Pazartesi başlanması isteniyorsa AddDays kullanılabilir.

DateTime Firstday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek);
DateTime Endday = Firstday.AddDays(6);

C# Dosya Yolundan Dosya İsmi Bulma

C# da Path class’ı kullanılarak dosya yolu string şeklinde gelen alandan dosya ismi aşağıdaki şekilde bulunabilir.

string path = “D:\\Works\\consoleapplication.txt”;
byte[] fileBytes = System.IO.File.ReadAllBytes(@path);
string fileName = Path.GetFileName(path);

Uzantısız almak için Path.GetFileNameWithoutExtension() kullanılabilir.

Resimleri Farklı Kaydet’i Engelleme

Yazdığınız uygulamadaki resimlerin indirilmesini istemiyorsanız browser default özelliği olan sağ tıklamayla resmi kaydet, resmi farklı kaydet gibi seçenekleri engellemeniz gerekir. Bunu jquery sorgusuyla basit bir şekilde yapabilirsiniz.

Buradaki slideImage resmin olduğu divin Id’sidir.

$(document).ready(function () {
$(‘#slideImage’).bind(‘contextmenu’, function () { return false; });
});

Visual Studio 2015 değişken değerlerini debug’ta görememe

Visual Studio 2015 fails to evaluate variables when two versions of assembly are loaded.  Debug yaparken AddWatch , QuickWatch ile değişken değerlerini kontrol ettiğimizde referanslardan birinin iki defa yüklenmiş olmasından dolayı null exception gibi bir uyarı çıkmaktadır. Bunu aşmak için Debug – > Options ->Debugging -> General ‘ın altında Use the legacy C# and VB expression evaluations seçeneği işaretlenmelidir. Bu şekilde değerleri görebilirsiniz.

 

enter image description here

 

Resim boyutlama

if (Request.Files.Count > 0)
{
var file = Request.Files[0];
WebImage file1 = new WebImage(file.InputStream);
file1.Resize(220, 220);
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath(“~/Images/Foods/”), fileName);
// Apply the Scaled Resize Constraint
//new ScaledResizeConstraint(220, 220).SaveProcessedImageToFileSystem(“src.jpg”, “out.jpg”);
file1.Save(path);
// resize to 400 px, height 200, ScaleToFit, gif
//var byteArray3 = resizer.Resize(400, 200, false, ImageEncoding.Gif);
file.SaveAs(path);
ImageResizer resizer = new ImageResizer(path);

// resize to 400 px, jpg quality 90
var byteArray1 = resizer.Resize(220, 220, false, ImageEncoding.Png);

// resize to 400 px, height 200, ScaleToFill, png
var byteArray2 = resizer.Resize(220, 220, false, ImageEncoding.Png);
var byteArray3 = resizer.Resize(220, 220, false, ImageEncoding.Png);
resizer.SaveToFile(path);
food.Image = “Images/Foods/” + fileName;
}
}

http://imageresizer.apphb.com/?filename=krep.png

http://stackoverflow.com/questions/17079090/how-to-resize-and-save-an-image-which-uploaded-using-file-upload-control-in-c-sh

 

 

 

Hatalar ve Çözümleri

MVC : Entity ‘de bir değişiklik yapıp kaydetmeye çalıştığımızda ” Validation failed for one or more entities. See ‘EntityValidationErrors’ property for more details ” şeklinde bir hata alıyorsak  en olası sebebi şunlar olabilir  :

  1. Veritabanında (database) NULL olamaz olarak yapılandırılmış (Allow Nulls işareti kaldırılmış) bir alana NULL değer girmeye çalışmak
  2. Belirtilen üst sınır dışında veri giriyi yapmaya çalışmak, örneğin, nvarchar(5) olan bir alana 5 karakterden uzun veri girişi yapmaya çalışmak.

Çözüm olarak try catch bloğunda

catch (DbEntityValidationException e)
{
     foreach (var eve in e.EntityValidationErrors)
     {
           Response.Write(string.Format("Entity türü \"{0}\" şu hatalara sahip \"{1}\" Geçerlilik hataları:", eve.Entry.Entity.GetType().Name, eve.Entry.State));
       foreach (var ve in eve.ValidationErrors)
       {
         Response.Write(string.Format("- Özellik: \"{0}\", Hata: \"{1}\"", ve.PropertyName, ve.ErrorMessage));
        }
         Response.End();
         }



şeklinde bir kod parçasıyla hangi property’den dolayı hata alındığını görebiliriz.

C#  :  System.InvalidCastException: Specific cast is not valid (Belirtilen atama geçerli değil ) hatası : Bu hata iletilecek datanın beklenen şekilde alınmadığı ya da atandığı datatable, list vs. ile uyumlu olmadığından dolayı verilebiliyor. Bu hatayla entity’de sp’den aldığım datayı datatable atarken aldım. Sp’nin döndüğü cursor’u kontrol ettiğimde bir kolonun , den sonraki ondalık kısım da uzun bir rakamlar dizisi geldiğini gördüm. Round ile kolonun 3 haneli gelmesini sağlayınca hata düzeldi.

SQL :String or binary data would be truncated : Bu hata tabloya insert etmek ettiğiniz kayıttan dolayı alınabilir. Insert edilen kolonun length’i ile gelen data genişliği uyuşmamaktadır. Kolon length’i arttırılabilir.

MVC : Httpcontext current does not contain a definition hatası : Sebebi Controlller class’ı da HTTPCOntext isimli bir property’ye sahiptir. Buradaki HTTPContext’in altında Current property’si olmadığı için hata alınır.

HttpContext.Current kısmını System.Web.HttpContext.Current şeklinde değiştirmek gerekir.