Avatar
N-nojmi
Člen
Avatar
N-nojmi:

Zdravím,
dělám aplikaci co má za úkol odeslat 35k emailů, bohužel jsem do zadavatele nedostal validní emailové adresy a jakmile aplikace narazí na první nevalidní adresu (mezery, jména za emailem, dva spojení emaily atd.... ). Potřeboval bych od vás poradit, jak mám upravit kód, aby aplikace v případě chyby se zastavila zapsala chybu do DB a pak se zase rozběhla a pokračovala dál. Napadlo mě dát to do bloku try, catch, ale nevím jak pokračovat..... aplikace píše chybu : The specified string is not in the form required for an e-mail address.

Kód:

try
           {
               if (email.SestavEmail())
               {
                   Label2.Text = (Convert.ToInt32(Label2.Text) + 1).ToString();
               }
               else
               {
                   Timer1.Enabled = false;
                   Label5.Text = "Emaily byly odeslány.";
               }
           }
           catch (Exception ex)
           {
               if (ex.Message == "The specified string is not in the form required for an e-mail address.")
               {
                   email.ZapisChybu();
               }

           }

děkuju za pomoc

Editováno 19.11.2015 14:40
Odpovědět 19.11.2015 14:39
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Odpovídá na N-nojmi
Ondřej Štorc:

Co něco takového:

while(emailRemaining)
{
        try
        {
                //Odeslání emailů
        }
        catch(Exception ex)
        {
                // Zapáis do DB o chybě
        }
}

A možná by nebylo od chyby místo zachytávání všech vyjímek, zachytávat jen tu, kterou vyhazují nevalidní emaily

Nahoru Odpovědět 19.11.2015 14:49
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na N-nojmi
Ondřej Štorc:

A ještě možná by nebylo od věci si třeba ověřit formát těch emailových adres podle regexu a zkusit odeslat jen ty které jsou validní (třeba zde: http://emailregex.com je regex pro emaily)

Editováno 19.11.2015 14:53
Nahoru Odpovědět  +2 19.11.2015 14:52
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
N-nojmi
Člen
Avatar
Odpovídá na Ondřej Štorc
N-nojmi:

Přesně to mě taky napadlo, že to možná řeším moc pozdě, takže už je vliduju, jakmile je vytáhnu z DB a jakmile nejsou validní už je ani nikam neposílám, jenom si v DB poznamenám, že jsou na hovno.....

Díky za tip na regulární výrazt ;)

Nahoru Odpovědět 19.11.2015 16:15
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Ľuboš Čurgó
Redaktor
Avatar
Ľuboš Čurgó:

ziadny try catch netreba,

  class Program
    {
        static void Main(string[] args)
        {
            var emails = new List<string>();

            emails.ForEach((email) =>
            {
                if (email.IsEmailValid())
                {
                    //send email
                }
            });

        }
    }
}

public static class Extenstions
{
    public static bool IsEmailValid(this string email)
    {
        bool isEmail = Regex.IsMatch(email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);

        if (!isEmail)
        {
            //log exception

            return false;
        }
        return true;
    }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +3 19.11.2015 18:18
Avatar
N-nojmi
Člen
Avatar
Odpovídá na Ľuboš Čurgó
N-nojmi:

Díky, přesně tak jsem to nakonec udělal, ale zlobí mě regulární výraz co jsem našel.... aplikace spadne při nalezení emailu např. : *******ránský@sez­nam.cz, nebo *********ąa@s­eznam.cz, atd....

Nahoru Odpovědět 20.11.2015 10:30
Není hloupých lidí, jen lidí co málo používají google...
Avatar
N-nojmi
Člen
Avatar
Odpovídá na N-nojmi
N-nojmi:

ale koukám tvoje kontrola mejlů je o moc lepší, než co jsem našel ;) takže moc děkuju ;)

Nahoru Odpovědět 20.11.2015 12:27
Není hloupých lidí, jen lidí co málo používají google...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.