none
c# ile mail gönderme işleminde catch'a düşmüyor RRS feed

  • Soru

  • Mail gönderme işlemi yapıyorum kodları (Mailleri gönderme işlemleri başarıyla gerçekleşmektedir. Fakat yanlış/hatalı mail adreslerinde çalışmamaktadır.)

     
    
                        using (var smtp = new SmtpClient())
                        {
                            smtp.Host = emailSetting.Host;
                            smtp.EnableSsl = emailSetting.EnableSSL ?? true;
                            smtp.Port = Convert.ToInt32(emailSetting.Port);
    
                            smtp.UseDefaultCredentials = false;
                            var credentials = new NetworkCredential
                            {
                                UserName = emailSetting.EmailAdress,
                                Password = emailSetting.Password
                            };
                            smtp.Credentials = credentials;
    
                            int sendMailCount = 0;
                            var x = serviceEmail.GetQueueEmail();
                            foreach (var email in x.ToList())
                            {
                                using (var mailMessage = new MailMessage())
                                {
                                    try
                                    {
                                        mailMessage.From = new MailAddress(emailSetting.EmailAdress, emailSetting.FromDisplayName);
                                        mailMessage.To.Add("xyz@hotmail.com");//hatalı email adresi
    
                                        mailMessage.Subject = email.Subject;
                                        mailMessage.IsBodyHtml = true;
                                        mailMessage.Body = email.Body;
                                        smtp.Send(mailMessage);
    
                                       
                                    }
                                    catch (Exception ex)
                                    {
                                        //Hatalı bir email adresi girilmesine rağmen catch'e düşmemektedir.
    
                                        continue;
                                    }
                                }
                            }

    Hatalı email adresi gönderiyorum normalde send metottan sonra catch'e düşmeli fakat catch'e düşmemektedir. (Düşmediğinden dolayı loglama işlemleri ve mail'in gerçekten gönderilip gönderilmediğini ayırt edemiyorum.)

    Yardımlarınızı bekliyorum
    şimdiden teşekkür ederim.

    11 Haziran 2018 Pazartesi 12:47

Tüm Yanıtlar

  • oraya

    MessageBox.Show(ex.Message);

    ekle.

    Buradan yardım alabilirsin;

    C# ile Mail Gönderme


    http://koddefteri.net

    11 Haziran 2018 Pazartesi 13:49
  • Hatalı mail adresinden kastınız nedir? Biçim olarak mail adresi olmayan "asdasd.hotmail.com" gibi olanlar mı yoksa biçim olarak doğru herhangi bir kullanıcı tarafından kullanılmayan "sadasd@daasdasd.com" gibi adresler mi?

    İlkini göndermeden önce yakalayabilirsiniz. İster c# ile gelen mailaddress sınıfnı kullanırsınız ister regex vb. kontroller yaparsınız.

    İkinci kısımda ise durum karışık. Mail adresindeki sunucu kısmını alıp gerçek bir sunucuya denk geliyor mu diye bakabilirsiniz. Eğer bu doğru ise posta kutusu geçerli mi diye tekrar sormanız gerekecek. Bunun için hedef SMTP nin VRFY komutunu desteklemesi gerekmekte (spam ile mücadele için bu genellikle kapalıdır). Dolayısılya tam burada kapana kısılırsınız. Catch  vs. ile yakalamanız mümkün olmaz. Bu adres kullanılmıyor ise bir süre sonra size hedef SMTP sunucusu yine mail olarak yanıt dönebilir... çekilir iş değil :)


    www.cihanyakar.com



    11 Haziran 2018 Pazartesi 14:25
  • Öncellikle Cihan Bey çok teşekkür ederim.
    Biçim olarak doğru ama  herhangi bir kullanıcı tarafından kullanılmayan mail adreslerinden bahsediyorum.

    örneğin hotmail smtp'sini kullanarak mail gönderiyorum. kullanılmayan mail adresi olsa bile send metodu çalışıyor ve gönderim yaptığım email'e mail gönderilemedi diye geri bildirim geliyor. :(

    Bunun için herhangi bir çözüm yok mu?

    Toplu mail gönderme işlemi yapıyorum ve mailler gidersen giden mailin durumunu gönderildi yapıyorum eğer mail gitmediyse mail durumunu gönderilemedi diye kaydetip listeleme yapıyorum. Böyle durumda hepsi gönderildi gözüküyor.

    11 Haziran 2018 Pazartesi 14:37
  • Catch'e düşmez çünkü karşı sunucu başarılı şekilde mesajı almış oluyor. Sizin mail göndermeden önce kontrol etmeniz gerekii ama dediğim gibi "spam"a ortam oluşturmamak için bu doğrulama çoğu sunucuda kapalıdır.  Zaten bunun açık olduğu sunucularda posta kutsunun olmadığına dair bir geri dönüş oluyor. Benim bildiğim başka "formal" bir yol yok. Başka türlü yöntem bilen varsa yeşilendirir zaten burayı.

    www.cihanyakar.com

    11 Haziran 2018 Pazartesi 15:28