Your endless loop is here:
while (s.Available == 0)
{
System.Threading.Thread.Sleep(100);
}
It goes into that loop and since
s.Available
cannot possibly change, it just sits and spins in that loop. Of course, you could have determined this if you had gone ahead and used the debugger that comes with Visual Studio.
How you're going to fix it is up to you, but I recommend that you look into setting up a thread that either calls VerifyEmail() or replaces it.