C# ile GMail üzerinden e-posta gönderme
Windows uygulamalarınız üzerinden e-posta gönderebilmek güzel bir özellik.
Uygulama içerisinden e-posta gönderme konusunda ilk akla gelen sorulardan bir tanesi, “GMail üzerinden e-posta gönderebilir miyim?” oluyor.
Bu yazımda, GMail üzerinden e-posta gönderebileceğimiz bir uygulama geliştireceğim.
Öncelikle kodumuzun using kısmına System.Net ve System.Net.Mail namespace’ini eklememiz gerekiyor.
.Net Framework, System.Net.Mail namespace‘i içerisinde çeşitli class‘lar aracılığı ile uygulamanız içerisinden kolaylıkla e-posta gönderilmesini mümkün kılıyor.
using System.Net.Mail; using System.Net;
İlk yapmamız gereken, SmtpClient sınıfından bir örnek oluşturmak ve bazı özelliklerini ayarlamak.
SmtpClient sc = new SmtpClient(); sc.Port = 587; sc.Host = "smtp.gmail.com"; sc.EnableSsl = true;
Port özelliği ile, Smtp sunucusuna erişeceğimiz port numarasını belirliyoruz
Host özelliği ile, GMail Smtp sunucusunun adresini belirliyoruz
EnableSsl özelliği ile, GMail Smtp sunucusuna bağlanacağımız protokolu belirliyoruz. Eğer true değer atarsak https, eğer false değer atarsak http protokolü kullanılır.
GMail e-posta adresimizi ve şifremizi, Credentials özelliğine NetworkCredential sınıfından bir örnek ile atamamız gerekiyor.
sc.Credentials = new NetworkCredential("eposta@gmail.com", "gmail_sifre");
SmtpClient örneği üzerinden gönderilecek posta, MailMessage tipinde olmalıdır. Bir sonraki adımda MailMessage sınıfından bir örnek oluşturuyoruz.
MailMessage mail = new MailMessage();
mail.From = new MailAddress("eposta@gmail.com", "Ekranda Görünecek İsim");
mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");
mail.CC.Add("alici3@mail.com");
mail.CC.Add("alici4@mail.com");
mail.Subject = "E-Posta Konusu";
mail.IsBodyHtml = true;
mail.Body = "E-Posta İçeriği";
mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));
Son olarak, SmtpClient sınıfının Send() method’unu kullanarak, oluşturduğumuz MailMessage örneğini gönderiyoruz.
sc.Send(mail);
Kodların toparlanmış hali;
using System;
using System.Net.Mail;
using System.Net;
class Program
{
static void Main(string[] args)
{
SmtpClient sc = new SmtpClient();
sc.Port = 587;
sc.Host = "smtp.gmail.com";
sc.EnableSsl = true;
sc.Credentials = new NetworkCredential("eposta@gmail.com", "gmail_sifre");
MailMessage mail = new MailMessage();
mail.From = new MailAddress("eposta@gmail.com", "Ekranda Görünecek İsim");
mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");
mail.CC.Add("alici3@mail.com");
mail.CC.Add("alici4@mail.com");
mail.Subject = "E-Posta Konusu"; mail.IsBodyHtml = true; mail.Body = "E-Posta İçeriği";
mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));
sc.Send(mail);
}
}
İlgili diğer başlıklar:
EnableSsl özelliği ile ilgili bir not düşmek istiyorum; yazıdan, SSL’i tercihe bağlı kullanabilirim gibi bir anlam çıkarıyorum ama gmail kullanarak SMTP üzerinden e-posta gönderebilmek için SSL kullanmak zorunlu. Bir dip not düşeyim dedim…
merhaba denedim gönderildi diye ekranda hatasız gözüküyor ama gitmiyor neden olabilir.
Junk mail klasörüne düşüyor olabilir mi?
Gmail ile daha önce smtp mail göndermeyi denediğimde EnableSsl = true; olmalı idi. Son yaptığım denemede bu şekilde bir türlü çalışmadı. Aldığım Hata daha doğrusu google mail sunucunun gönderdiği hata kodu
“Komut uygulanmadı. Sunucu yanıtı şöyleydi: 5.5.1 Unrecognized command. 24sm6601163bkr.7 ”
ama ssl desteğini kapadığımda çalıştı. ve mail hotmail adresine hemen ulaştı.
bilginize.
belki kullandığım portla alakalı olabilir diye düşündüm ama kullandığım Port:587 diğer google portlarınıda denedim ama yine olmadı tek çalıştırabildiğim bu.
Lakin google kendi sistesinde pop ayarlarından bahsederken ssl desteğinin açık olması gerektiğini söylüyor. ve en son baktığımda hala öyle idi. burdaki sorunun nerden kaynaklandığını bilmiyorum. kodun çalışıyor olması ve mail göndermesi hatasız olduğunu manasına gelmez sanırım. bu konuda bir fikri yada bilgisi olan varsa lütfen yazsın.