Ejemplo n.º 1
0
        private async Task <Pop3> Connect(UserInfo userInfo)
        {
            var  timeout     = _settings.ConnectionTimeOutMilliseconds;
            Task timeoutTask = Task.Delay(timeout);

            var connectionTask = Task.Run(() =>
            {
                Pop3 pop3 = _pop3Factory.GetInstance();

                if (userInfo.EncryptionType == Model.Enum.EncryptionType.Unencrypted)
                {
                    pop3.Connect(userInfo.Server, userInfo.Port);
                }
                else if (userInfo.EncryptionType == Model.Enum.EncryptionType.SslTls)
                {
                    pop3.ConnectSSL(userInfo.Server, userInfo.Port);
                }
                else
                {
                    pop3.Connect(userInfo.Server, userInfo.Port);
                    pop3.StartTLS();
                }

                pop3.UseBestLogin(userInfo.UserName, userInfo.Password);

                return(pop3);
            });

            var completedTask = await Task.WhenAny(connectionTask, timeoutTask);

            if (completedTask == connectionTask)
            {
                return(await connectionTask);
            }
            else
            {
                throw new TimeoutException("Connection with the server timed out");
            }
        }