public void Login(GXPOP3Session sessionInfo)
        {
            GXLogging.Debug(log, "Using OpenPOP POP3 Implementation");
            _sessionInfo = sessionInfo;
            client       = new Pop3Client();

            try
            {
                client.Connect(Host, Port, sessionInfo.Secure == 1);

                client.Authenticate(UserName, Password, AuthenticationMethod.Auto);
                count = client.GetMessageCount();
                uIds  = client.GetMessageUids();
                uIds.Insert(0, string.Empty);
            }
            catch (PopServerNotAvailableException e)
            {
                LogError("Login Error", "PopServer Not Available", MailConstants.MAIL_CantLogin, e);
            }
            catch (PopServerNotFoundException e)
            {
                LogError("Login Error", "Can't connect to host", MailConstants.MAIL_CantLogin, e);
            }
            catch (InvalidLoginException e)
            {
                LogError("Login Error", "Authentication error", MailConstants.MAIL_AuthenticationError, e);
            }
            catch (Exception e)
            {
                LogError("Login Error", e.Message, MailConstants.MAIL_CantLogin, e);
            }
        }
 public string GetNextUID(GXPOP3Session session)
 {
     if (lastReadMessage == count)
     {
         LogDebug("No messages to receive", "No messages to receive", MailConstants.MAIL_NoMessages);
         return("");
     }
     return(uIds[lastReadMessage + 1]);
 }
 public void Skip(GXPOP3Session sessionInfo)
 {
     if (lastReadMessage == count)
     {
         LogError("No messages to receive", "No messages to receive", MailConstants.MAIL_NoMessages);
         return;
     }
     ++lastReadMessage;
 }
 public void Logout(GXPOP3Session sessionInfo)
 {
     if (client != null)
     {
         client.Disconnect();
         client.Dispose();
         client = null;
     }
 }
 public void Delete(GXPOP3Session sessionInfo)
 {
     try
     {
         client.DeleteMessage(lastReadMessage);
     }
     catch (PopServerException e)
     {
         LogError("Delete message error", e.Message, MailConstants.MAIL_ServerRepliedErr, e);
     }
 }
        public void Receive(GXPOP3Session sessionInfo, GXMailMessage gxmessage)
        {
            if (client == null)
            {
                LogError("Login Error", "Must login", MailConstants.MAIL_CantLogin);
                return;
            }

            if (lastReadMessage == count)
            {
                LogDebug("No messages to receive", "No messages to receive", MailConstants.MAIL_NoMessages);
                return;
            }
            try {
                if (count > lastReadMessage)
                {
                    Message m = null;
                    try
                    {
                        m = client.GetMessage(++lastReadMessage);
                    }
                    catch (Exception e)
                    {
                        LogError("Receive message error", e.Message, MailConstants.MAIL_ServerRepliedErr, e);
                    }

                    if (m != null)
                    {
                        MailMessage msg;
                        try
                        {
                            msg = m.ToMailMessage();
                        }
                        catch (ArgumentException ae)
                        {
                            GXLogging.Error(log, "Receive message error " + ae.Message + " subject:" + m.Headers.Subject, ae);
                            PropertyInfo subjectProp = m.Headers.GetType().GetProperty("Subject");
                            string       subject     = m.Headers.Subject;
                            if (HasCROrLF(subject))
                            {
                                subjectProp.SetValue(m.Headers, subject.Replace('\r', ' ').Replace('\n', ' '));
                                GXLogging.Warn(log, "Replaced CR and LF in subject " + m.Headers.Subject);
                            }
                            msg = m.ToMailMessage();
                        }
                        using (msg)
                        {
                            gxmessage.From = new GXMailRecipient(msg.From.DisplayName, msg.From.Address);
                            SetRecipient(gxmessage.To, msg.To);
                            SetRecipient(gxmessage.CC, msg.CC);
                            gxmessage.Subject = msg.Subject;
                            if (msg.IsBodyHtml)
                            {
                                gxmessage.HTMLText = msg.Body;
                                MessagePart plainText = m.FindFirstPlainTextVersion();
                                if (plainText != null)
                                {
                                    gxmessage.Text += plainText.GetBodyAsText();
                                }
                            }
                            else
                            {
                                gxmessage.Text = msg.Body;
                            }
                            if (msg.ReplyToList != null && msg.ReplyToList.Count > 0)
                            {
                                SetRecipient(gxmessage.ReplyTo, msg.ReplyToList);
                            }

                            gxmessage.DateSent = m.Headers.DateSent;
                            if (gxmessage.DateSent.Kind == DateTimeKind.Utc && GeneXus.Application.GxContext.Current != null)
                            {
                                gxmessage.DateSent = DateTimeUtil.FromTimeZone(m.Headers.DateSent, "Etc/UTC", GeneXus.Application.GxContext.Current);
                            }
                            gxmessage.DateReceived = GeneXus.Mail.Internals.Pop3.MailMessage.GetMessageDate(m.Headers.Date);
                            AddHeader(gxmessage, "DispositionNotificationTo", m.Headers.DispositionNotificationTo.ToString());
                            ProcessMailAttachments(gxmessage, m.FindAllAttachments());
                        }
                    }
                }
            }catch (Exception e)
            {
                LogError("Receive message error", e.Message, MailConstants.MAIL_ServerRepliedErr, e);
            }
        }