Önceden yandex üzerinden kullandığım kurumsal eposta bilgilendirmesi maili için kurumsal eposta satan mail servisleri ile görüşüp içinden beğendiğim bir tanesini satın aldım.
Bu süreçte yaşadıklarımı ve tecrübelerimi sizlerle paylaşıp bu yazıyı okuyanlara zaman kazandırmayı amaçlıyorum.
Bilen bilir, bir hosting hesabınız varsa pop3 mail üzerinden kurumsal eposta yollayabilirsiniz. Fakat pop3 mailler ücretsiz mail sunucular ile yapılandırıldığı ve ip blokları belli zamanlarda kara listeye girmesi durumu olduğunda mail hesaplarınız sizin kontrolünüzde olmayacak şekilde kara listeye düşebiliyor.
Bu durumdan sonra para veya itibar kaybına uğradığınızda anlıyorsunuz ki, ucuz hatta bedava etin tadı çok yavan oluyor. Bu sebepten biraz para harcayayım ve en azından profesyonel bir mail hizmeti alayım düşüncesine kapılıyorsunuz ve başlıyorsunuz araştırmaya.
Bunun için microsoft yada gmail servisleri bu işin piri fakat çok ama çok pahalı.
Eğer ticari kullanım için değil de bir bilgilendirme servisi amacıyla bu mail servisini kullanacaksanız, ara ara mail adresi açmanız gerekecekse gmail’e veya microsoft a kullanıcı başına para ödeme derdine giremezsiniz.(Eğer para probleminiz yoksa ayrı tabi)
Öncesinde yandex (bedava) kullanan biri olarak söylemeliyim ki, beni bu yandex’in kurumsal hesabı (ben bedava olan sürece yetiştiğim için söylüyorum) (Artık paralı ) beni çok uzun süre idare etti.
Fakat belli bir süre sonra yandex sunucularının yurt dışında olması, ara ara yandex sunucularına ambargolar uygulanması, mailler ile ilgili sağlıklı bir muhatap bulamamamdan kaynaklı bu işe giriştim diyebilirim.
Süreci baştan anlatayım.
- aşamada kurumsal eposta satan bir firma ile satın alma gerçekleştirdim. Hosting ‘im de orada olduğu için çok hızlı bir biçimde kurulumu yaptılar. Mail gönderme ve almada bir sorunum yok fakat ben bu maili kendim mail atayım diye değil, yazdığım yazılım mail atsın diye satın aldım.
Satın aldığım hesap üzerinden mail atarken 587 portundan SSL=True ile yolladığım maile istinaden sunucu güvenli bağlantı kabul etmiyor hatası aldım ve bunu ticket açarak firmaya ilettim.
Yaklaşık 1 günlük yazışmadan sonra firmadan aşağıdaki cevabı aldım ve resmen aydınlandım.
“Sorunun kaynağı olarak System.Net.Mail kütüphanesinin SSL/TLS bağlantı yönetimi görünüyor. System.Net.Mail eski ve bazen modern SSL/TLS gereksinimlerini karşılamada yetersiz kalıyor görünüyor. Smarter mail sisteminin bizlere sunduğu SSL/TLS bağlantı seçeneklerindeki sürümler ile System.Net.Mail kütüphanesinin kullandığı sürümler uyumlu görünmemekte. Bu sebeple Mailkit kullanarak deneme sağladığımızda mailler sorunsuz olarak SSL portu üzerinden iletildi. https://vshot.com.tr/s/smt/2024/07/30/s265nm7i.png - System.Net.Mail: Bu kütüphane, daha eski SSL/TLS protokollerini kullanıyor. Modern SMTP sunucuları, daha güvenli ve güncel protokolleri zorunlu kılıyor ve eski protokollerle bağlantıları reddediyor.
MailKit: Daha güncel bir kütüphane olarak, daha yeni ve güvenli SSL/TLS protokollerini destekliyor. Bu, sunucuların taleplerine daha iyi yanıt verebiliyor. - System.Net.Mail üzerinde SSL false durumdayken sorunsuz iletim sağlarken, SSL true iken bu kütüphane sunucudaki SSL/TLS versiyonlarını karşılayamadığı için hata alıyor.
- Bu durumda yukarı ilettiğim kod satırları ile Mailkit kütüphanesi kullanarak işlem sağlayabilir ya da System.Net.Mail ile SSL false durumunda kullanım sağlayabilirsiniz. Maalesef ki smartermail sistemi eski sürümleri aktif edebilme imkanı sunmamakta. Buna ek olarak edilmesi de güvenlik zaafiyeti yaratacaktır.
“Sorunun kaynağı olarak System.Net.Mail kütüphanesinin SSL/TLS bağlantı yönetimi görünüyor. System.Net.Mail eski ve bazen modern SSL/TLS gereksinimlerini karşılamada yetersiz kalıyor görünüyor. Smarter mail sisteminin bizlere sunduğu SSL/TLS bağlantı seçeneklerindeki sürümler ile System.Net.Mail kütüphanesinin kullandığı sürümler uyumlu görünmemekte. Bu sebeple Mailkit kullanarak deneme sağladığımızda mailler sorunsuz olarak SSL portu üzerinden iletildi.
System.Net.Mail: Bu kütüphane, daha eski SSL/TLS protokollerini kullanıyor. Modern SMTP sunucuları, daha güvenli ve güncel protokolleri zorunlu kılıyor ve eski protokollerle bağlantıları reddediyor.
MailKit: Daha güncel bir kütüphane olarak, daha yeni ve güvenli SSL/TLS protokollerini destekliyor. Bu, sunucuların taleplerine daha iyi yanıt verebiliyor.
System.Net.Mail üzerinde SSL false durumdayken sorunsuz iletim sağlarken, SSL true iken bu kütüphane sunucudaki SSL/TLS versiyonlarını karşılayamadığı için hata alıyor.
Bu durumda yukarı ilettiğim kod satırları ile Mailkit kütüphanesi kullanarak işlem sağlayabilir ya da System.Net.Mail ile SSL false durumunda kullanım sağlayabilirsiniz. Maalesef ki smartermail sistemi eski sürümleri aktif edebilme imkanı sunmamakta. Buna ek olarak edilmesi de güvenlik zaafiyeti yaratacaktır.”
Yani diyor ki, senin c# üzerinden yolladığın mailde system.net.mail kütüphanesini kullanma mail.kit diye 3. parti bir kütüphane var git onu kullan 🙂
Öyle şey olur mu ? ben niye başka bir kütüphaneye bağımlı kalayım. Sonuç olarak firmadan paramı geri iade istedim ve hesabımı kapattım.
Sonra başladım araştırmaya.
İnanın arkadaşlar bu işler öyle internetten araştırarak olmuyor, tanıdığım bir sunucu firmasının sahibini aradım, konuyu anlattım ve sizde de aynı şeyi yaşarsak para iadesi isterim bozuşmayalım dedim.
O da tabiiki isteyebilirsin ama bizde böyle sorunlar olmaz dedi.
Ve sonuç olarak tabiiki sorun oldu 🙂
Ama nasıl bir sorun oldu, “Güvenli bağlantıya izin vermiyor” hatası almadık, ssl kullanıyorsan handshake yapman gerekiyor diye bir hata aldık. Bu hatayı ticket’e ilettiğimizde ise aldığımız cevap şu şekildeydi.
aşağıdaki portları kullanmanız gerekiyor 🙂 (Yazının sonuna doğru kodlamayı paylaşacağım, zaten onlara da yollamıştım) Yani yazıştığım arkadaş konuyu hiç anlamamış ve anladım ki anlamayacak.
IMAP Sunucu Portu: 993 / SSL
143 / STARTTLS
POP3 Sunucu Portu: 995 / SSL
110 / STARTTLS
Giden Sunucu Portu: 465 / SSL
587 / STARTTLS
Bu hatayı geçmek için ise, aşağıdaki kod parçasını kullandık.
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
Ve sessiz bir şekilde ticket’i kapattım.
Sorun çözüldü.
Şimdi sizlere örnek c# kodunu paylaşacağım. Umarım faydalı olur.
try
{
string smtpAddress = "sunucumailurl"; // SMTP sunucusunun adresi
int portNumber = 587; // SSL için 465, TLS için 587 kullanın
bool enableSSL = true; // SSL/TLS etkinleştir
string emailFrom = "epostaad@domain.net";
string password = "*****";
string emailTo = "haktan.akdag@dokuzsistem.com";
string subject = "Hello";
string body = "Hello, this is a test email.";
using (MailMessage mail = new MailMessage())
{
mail.From = new MailAddress(emailFrom);
mail.To.Add(emailTo);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
{
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(emailFrom, password);
smtp.EnableSsl = enableSSL;
smtp.Timeout = 100000; // 100 saniye
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
smtp.Send(mail);
Console.WriteLine("Email sent successfully.");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Email send failed: " + ex.Message);
}
return "";
İyi kodlamalar..