Exemple #1
0
        public static void Init()
        {
            TestBtcAddr.Init();

            log          = new Log();
            test         = new Test();
            settings     = new Settings();
            credentials  = new Credentials(settings);
            db           = new DB();
            ticketClient = new TicketClient(settings);
            btc          = new BTC(
                settings.data.btc_host,
                settings.data.btc_rpcuser,
                settings.data.btc_rpcpassword
                );
            cert           = new Cert();
            btcAddrStorage = new BTCAddrStorage()
            {
                CNT = settings.data.storage_btc_addr_cnt
            };
            btcAddrStorage.Init(
                settings
                .data
                .storage_btc_addr_types
                .Replace(" ", "")
                .Split(',')
                );
            emailParser = new EmailParser()
            {
                mailer = new Mailer()
            };
            emailParser.LoadLastEmails(App.settings.data.parse_last_emails);
        }
Exemple #2
0
        public int Parse(string inputString)
        {
            var parser = new EmailParser();
            var result = parser.Parser(inputString);

            return(result.Count());
        }
        //TODO: need optimizae DB requests
        internal static bool IsFromInternalUser(PXGraph graph, CRSMEmail message)
        {
            var @from = EmailParser.ParseAddresses(message.MailFrom).FirstOrDefault().With(_ => _?.Address).With(_ => _?.Trim());

            PXSelect <Users,
                      Where2 <Where <Users.guest, Equal <False>, Or <Users.guest, IsNull> >,
                              And <Users.email, Equal <Required <Users.email> > > > > .
            Clear(graph);

            var usersEmail = (Users)PXSelect <Users,
                                              Where2 <Where <Users.guest, Equal <False>, Or <Users.guest, IsNull> >,
                                                      And <Users.email, Equal <Required <Users.email> > > > > .
                             Select(graph, @from) != null;

            if (usersEmail)
            {
                return(true);
            }

            PXSelectJoin <EPEmployee,
                          LeftJoin <Contact, On <Contact.contactID, Equal <EPEmployee.defContactID> > >,
                          Where <EPEmployee.userID, IsNotNull, And <Contact.eMail, Equal <Required <Contact.eMail> > > > > .
            Clear(graph);

            return((EPEmployee)PXSelectJoin <EPEmployee,
                                             LeftJoin <Contact, On <Contact.contactID, Equal <EPEmployee.defContactID> > >,
                                             Where <EPEmployee.userID, IsNotNull, And <Contact.eMail, Equal <Required <Contact.eMail> > > > > .
                   Select(graph, @from) != null);
        }
        public void CanExtractZendeskLink()
        {
            var escalation = EmailParser.TryGetZendeskEscalation(EscalationMessageText);

            Assert.AreEqual("https://redgatesupport.zendesk.com/agent/tickets/41572", escalation.Url);
            Assert.AreEqual("ZD#41572", escalation.Id);
        }
Exemple #5
0
        private List <MailAddress> GetExternalMailOutside(CRSMEmail message)
        {
            var prevActivity = message;
            var result       = new List <MailAddress>();

            if (prevActivity == null)
            {
                return(result);
            }

            if (prevActivity.IsIncome == true)
            {
                var mailFrom = prevActivity.MailFrom.With(_ => _.Trim());
                if (!string.IsNullOrEmpty(mailFrom))
                {
                    result = EmailParser.ParseAddresses(mailFrom);
                }
            }
            else
            {
                result = EmailParser.ParseAddresses(prevActivity.MailTo);
            }

            return(result);
        }
        public void CanGetSummaryOfEmail()
        {
            var result = EmailParser.GetSlackFormattedSummary(EscalationMessageText);

            System.Console.WriteLine(result);
            Assert.AreEqual("*Rob Clenshaw* (Support)\nMay 28, 14:57 \nHe's not happy :(\nIs there anything we can do?\n*Ticket #* 41572 \n*Status* On-hold \n*Requester* A Customer  \n*CCs* - \n*Group* SQL \n*Assignee* Rob Clenshaw \n*Priority* Normal \n*Type* Incident \n*Channel* By mail \n&nbsp;\n<http://www.zendesk.com|Zendesk>. Message-Id:NJGVB39A_55671ee12ddf9_a3103fe9d48cd3382809a3_sprutTicket-Id:41572Account-Subdomain:redgatesupport", result);
        }
        protected override bool Process(Package package)
        {
            var account = package.Account;

            if (account.IncomingProcessing != true ||
                account.CreateActivity != true)
            {
                return(false);
            }
            PXGraph graph   = package.Graph;
            var     message = package.Message;

            if (!string.IsNullOrEmpty(message.Exception) || message.RefNoteID != null)
            {
                return(false);
            }

            List <String> addressesList = new List <String>( );

            addressesList.Add(package.Address);
            if (package.Message.IsIncome == false && package.Message.MailTo != null && package.Account.EmailAccountType == EmailAccountTypesAttribute.Exchange)
            {
                addressesList.InsertRange(0, EmailParser.ParseAddresses(message.MailTo).Select(m => m.Address));
            }

            foreach (String address in addressesList)
            {
                PXSelect <Contact,
                          Where <Contact.eMail, Equal <Required <Contact.eMail> > > > .
                Clear(package.Graph);

                var contact = (Contact)PXSelect <Contact,
                                                 Where <Contact.eMail, Equal <Required <Contact.eMail> > > > .
                              SelectWindowed(package.Graph, 0, 1, address);

                if (contact != null && contact.ContactID != null)
                {
                    graph.EnsureCachePersistence(typeof(Contact));
                    graph.EnsureCachePersistence(typeof(BAccount));

                    message.ContactID = contact.ContactID;

                    PXSelect <BAccount,
                              Where <BAccount.bAccountID, Equal <Required <BAccount.bAccountID> > > > .
                    Clear(package.Graph);

                    BAccount baCcount = PXSelect <BAccount,
                                                  Where <BAccount.bAccountID, Equal <Required <BAccount.bAccountID> > > > .
                                        Select(package.Graph, contact.BAccountID);

                    if (baCcount != null)
                    {
                        message.BAccountID = baCcount.BAccountID;
                    }

                    return(true);
                }
            }
            return(false);
        }
        public static void TestEmailParserExtractEmpty()
        {
            EmailParser parser = new EmailParser();

            IEnumerable <string> addresses = parser.Extract(string.Empty);

            Assert.That(addresses.Count(), Is.EqualTo(0));
        }
Exemple #9
0
 public SmtpServerClientProcessor(ITcpClientController clientController, ILogger logger)
 {
     _clientController          = clientController;
     EmailParser                = new EmailParser();
     RequestCommandsConverter   = new RequestCommandsConverter();
     ServerStatusCodesConverter = new ServerStatusCodesConverter();
     Logger = logger;
 }
Exemple #10
0
        public void QuotedPrintableNewlinesAreDecoded()
        {
            var parser = new EmailParser(new FakeSubjectParser());

            var email = parser.ParseEmail(Resources.FormSubmittedEmail);

            Assert.IsFalse(email.Body.Contains("=0D=0A"));
        }
Exemple #11
0
        //TODO: need optimizae DB requests
        internal static bool?IsFromInternalUser(PXGraph graph, CRSMEmail message)
        {
            var @from = EmailParser.ParseAddresses(message.MailFrom).FirstOrDefault().With(_ => _?.Address).With(_ => _?.Trim());

            PXSelect <Users,
                      Where2 <
                          Where <Users.guest, Equal <False>, Or <Users.guest, IsNull> >,
                          And <Users.email, Equal <Required <Users.email> > > > >
            .Clear(graph);

            var users = PXSelect <Users,
                                  Where2 <
                                      Where <Users.guest, Equal <False>, Or <Users.guest, IsNull> >,
                                      And <Users.email, Equal <Required <Users.email> > > > >
                        .Select(graph, @from);

            bool disabledUser = users.Count > 0 && users.RowCast <Users>().All(_ => _.State == Users.state.Disabled);

            if (disabledUser)
            {
                return(null);
            }

            if (users.Count > 0)
            {
                return(true);
            }

            PXSelectJoin <EPEmployee,
                          LeftJoin <Contact,
                                    On <Contact.contactID, Equal <EPEmployee.defContactID> > >,
                          Where <
                              EPEmployee.userID, IsNotNull,
                              And <Contact.eMail, Equal <Required <Contact.eMail> > > > >
            .Clear(graph);

            var employees = PXSelectJoin <EPEmployee,
                                          LeftJoin <Contact,
                                                    On <Contact.contactID, Equal <EPEmployee.defContactID> > >,
                                          Where <
                                              EPEmployee.userID, IsNotNull,
                                              And <Contact.eMail, Equal <Required <Contact.eMail> > > > >
                            .Select(graph, @from);

            bool disabledEmployee = employees.Count > 0 && employees.RowCast <EPEmployee>().All(_ => _.Status == EPEmployee.status.Inactive);

            if (disabledEmployee)
            {
                return(null);
            }

            if (employees.Count > 0)
            {
                return(true);
            }

            return(false);
        }
Exemple #12
0
        public MessageResult ProcessTimerTick()
        {
            var relevantInboxes = new HashSet <string>
            {
                "sqlcomparesupport",
                "sqldatacomparesupport",
                "sqlsdksupport",
                "sqlcomparecoreteam"
            };
            var   result = new List <Response>();
            Email email;

            while (m_Queue.TryDequeue(out email))
            {
                Trace.WriteLine("Inspecting email " + email.Subject);
                if (!email.IsFirstEmailInConversation)
                {
                    Trace.WriteLine("Skipping reply to a previously-seen email ...");
                    continue;
                }

                var relevantRecipients = email.RecipientEmails
                                         .Where(recipient => relevantInboxes.Any(recipient.Contains))
                                         .ToList();
                if (!relevantRecipients.Any())
                {
                    Trace.WriteLine("Skipping non-team-relevant email ...");
                    continue;
                }

                var asEscalation = EmailParser.TryGetZendeskEscalation(email.HtmlBody);
                if (asEscalation != null)
                {
                    result.Add(new Response(string.Format("New support escalation for {0}\n**{1}**\n{2}",
                                                          asEscalation.Id, email.Subject, email.FormattedBody),
                                            m_ChannelToPostEmailsTo, m_OutlookLogo));
                    m_LabelPrinter.PrintLabel(asEscalation.Id + ": " + email.Subject,
                                              new List <string> {
                        m_ZendeskLogo
                    });
                }
                else
                {
                    result.Add(new Response(string.Format("New email sent to {0}\n**{1}**\n{2}",
                                                          relevantRecipients.First(), email.Subject, email.FormattedBody),
                                            m_ChannelToPostEmailsTo, m_OutlookLogo));
                    m_LabelPrinter.PrintLabel(email.Subject, email.FormattedBody,
                                              new List <string> {
                        m_OutlookLogo
                    });
                }
            }
            if (!String.IsNullOrWhiteSpace(m_ChannelToPostEmailsTo))
            {
                return(new MessageResult(result));
            }
            return(MessageResult.Empty);
        }
Exemple #13
0
        private void button1_Click(object sender, EventArgs e)
        {
            EMailMessage message = new EMailMessage();
            EmailParser  parser  = new EmailParser();

            parser.ParseEMailMessage(ref message, textBox1.Text);

            message.ToString();
        }
        public static void TestEmailParserExtractCaseFolding()
        {
            EmailParser parser = new EmailParser();

            IEnumerable <string> addresses = parser.Extract("*****@*****.**");

            Assert.That(addresses.Count(), Is.EqualTo(1));
            Assert.That(addresses.First(), Is.EqualTo("*****@*****.**"));
        }
        public static void TestEmailParserExtractWithAdditional()
        {
            EmailParser parser = new EmailParser();

            IEnumerable <string> addresses = parser.Extract("recipients. This is a permanent error. The following address(es) failed:  [email protected] SMTP error from remote mail server after");

            Assert.That(addresses.Count(), Is.EqualTo(1));
            Assert.That(addresses.First(), Is.EqualTo("*****@*****.**"));
        }
Exemple #16
0
        protected void SendCopyMessageToInside(PXGraph graph, EMailAccount account, CRSMEmail message, IEnumerable <MailAddress> addresses)
        {
            var cache = graph.Caches[message.GetType()];
            var copy  = (CRSMEmail)cache.CreateCopy(message);

            copy.NoteID       = null;
            copy.EmailNoteID  = null;
            copy.IsIncome     = false;
            copy.ParentNoteID = message.NoteID;
            MailAddress address = null;

            copy.MailFrom = EmailParser.TryParse(message.MailFrom, out address)
                                ? new MailAddress(account.Address, address.DisplayName).ToString()
                                : account.Address;
            copy.MailTo    = PXDBEmailAttribute.ToString(addresses);          //TODO: need add address description
            copy.MailCc    = null;
            copy.MailBcc   = null;
            copy.MailReply = copy.MailFrom;
            copy.MPStatus  = MailStatusListAttribute.PreProcess;
            copy.ClassID   = CRActivityClass.EmailRouting;
            new AddInfoEmailProcessor().Process(new EmailProcessEventArgs(graph, account, copy));
            copy.RefNoteID  = null;
            copy.BAccountID = null;
            copy.ContactID  = null;
            copy.Pop3UID    = null;
            copy.ImapUID    = null;
            var imcUid = Guid.NewGuid();

            copy.ImcUID      = imcUid;
            copy.MessageId   = this.GetType().Name + "_" + imcUid.ToString().Replace("-", string.Empty);
            copy.OwnerID     = null;
            copy.WorkgroupID = null;

            copy = (CRSMEmail)cache.CreateCopy(cache.Insert(copy));

            //Update owner and reset owner if employee not found
            copy.OwnerID = message.OwnerID;
            try
            {
                cache.Update(copy);
            }
            catch (PXSetPropertyException)
            {
                copy.OwnerID = null;
                copy         = (CRSMEmail)cache.CreateCopy(cache.Update(copy));
            }

            copy.IsPrivate   = message.IsPrivate;
            copy.WorkgroupID = message.WorkgroupID;

            var noteFiles = PXNoteAttribute.GetFileNotes(cache, message);

            if (noteFiles != null)
            {
                PXNoteAttribute.SetFileNotes(cache, copy, noteFiles);
            }
        }
        public static void TestEmailParserExtractWithAngleBrackets()
        {
            EmailParser parser = new EmailParser();

            IEnumerable <string> addresses = parser.Extract("Firstname Lastname <*****@*****.**>");

            Assert.That(addresses.Count(), Is.EqualTo(1));
            Assert.That(addresses.First(), Is.EqualTo("*****@*****.**"));
        }
 public void ParseEamil(string email)
 {
     EmailParser.ParseEmail(email, out _referenceNumber, out _receivedDate, out _priority, out _deadlineDate, out _siteNumber, out _address, out _problemDescription);
     OnPropertyChanged(nameof(ReferenceNumber));
     OnPropertyChanged(nameof(DateReceived));
     OnPropertyChanged(nameof(Priority));
     OnPropertyChanged(nameof(DeadlineDate));
     OnPropertyChanged(nameof(SiteNumber));
     OnPropertyChanged(nameof(Address));
     OnPropertyChanged(nameof(ProblemDescription));
 }
Exemple #19
0
        public IEnumerable <string> Post([FromBody] TagsSearchByTagStartToken Search)
        {
            List <string> returnStrings = null;

            if (Search != null && Search.TagStartToken != null && Search.TagStartToken.Length > 0 && Search.EmailBodyText != null && Search.EmailBodyText.Length > 0)
            {
                var tags = EmailParser.FindTags(Search.EmailBodyText, Search.TagStartToken, Search.RemoveDuplicates, Search.ExcludePriorEmailsFromSearch);
                returnStrings = TagProcessingBusinessLogic.ProcessTagsFoundInEmailBodyText(Search, returnStrings, tags, Search.PersistResultsServerSide, false, true);
            }
            return(CreateReturnStringsTelemetry(Search, returnStrings));
        }
Exemple #20
0
        public void MultipleToAddressesAreParsed()
        {
            var parser = new EmailParser(new FakeSubjectParser());

            var email = parser.ParseEmail(Resources.FormSubmittedEmailMultipleRecipients);

            Assert.AreEqual(3, email.To.Count);
            Assert.AreEqual("*****@*****.**", email.To[0]);
            Assert.AreEqual("*****@*****.**", email.To[1]);
            Assert.AreEqual("*****@*****.**", email.To[2]);
        }
Exemple #21
0
        public void ProcessOrdinalTagsFoundInEmailBodyTextTest()
        {
            var testRequest03 = JsonConvert.DeserializeObject <TagsSearchByTagStartTokenOrdinal>(File.ReadAllText(TestUtilities.GetTestRequestFilePath("TestRequest03.json")));
            var tags          = EmailParser.FindTags(testRequest03.EmailBodyText, testRequest03.TagStartToken, testRequest03.RemoveDuplicates, testRequest03.ExcludePriorEmailsFromSearch);
            var ordinalTags   = EmailParser.FindTagsOnContiguousNewLines(testRequest03.EmailBodyText, testRequest03.TagStartToken);
            var result        = TagProcessingBusinessLogic.ProcessOrdinalTagsFoundInEmailBodyText(testRequest03, null, tags, ordinalTags, 3, false);

            if (result.Count < 1)
            {
                Assert.Fail();
            }
        }
Exemple #22
0
 static WordSpliter()
 {
     _ipParser       = new IpParser();
     _arabParser     = new ArabNumberParser();
     _chNumberParser = new ChineseNumberParser();
     _emojiParser    = EmojiParser.Parser;
     _emailParser    = new EmailParser();
     _englishParser  = new EnglishWordParser();
     _goodsParser    = new GoodsUrlParser();
     _urlParser      = new UrlParser();
     _chineseParser  = new ChineseWordParser();
 }
        /// <summary>Process tags in a search, looking for ordinal tags.</summary>
        /// <param name="Search">The plain text (html elements stripped) version of the email to be parsed and other configuration paramaters.</param>
        /// <param name="ReturnOnlyMattersTags">Should the results be filtered to only include matter tags.</param>
        public static List <string> ProcessOrdinalTags(TagsSearchByTagStartTokenOrdinal Search, bool ReturnOnlyMattersTags = false)
        {
            List <string> returnStrings = null;

            if (Search != null && Search.TagStartToken != null && Search.TagStartToken.Length > 0 && Search.EmailBodyText != null && Search.EmailBodyText.Length > 0)
            {
                //Find all of the tags in the email
                var tags = EmailParser.FindTags(Search.EmailBodyText, Search.TagStartToken, Search.RemoveDuplicates, Search.ExcludePriorEmailsFromSearch);

                int           tagSetSize  = TagProcessingBusinessLogic.GetOrdinalTagSetSize(Search);
                List <string> ordinalTags = null;

                //Search for ordinal tags if there is a declared minimum set size greater than 0. Note that a search below size of 2 is pointless so we may want to revisit ths
                if (tagSetSize > 0)
                {
                    //Find ordinal (sequenced) tags in the email
                    ordinalTags = EmailParser.FindTagsOnContiguousNewLines(Search.EmailBodyText, Search.TagStartToken, Search.RemoveDuplicates, Search.ExcludePriorEmailsFromSearch);
                }

                foreach (var item in tags)
                {
                    if (MatterIdentificationBL.ValidateMatterID(Search.TagStartToken, item))
                    {
                        Search.MatterId = item.Substring(Search.TagStartToken.Length);
                        break;
                    }
                }

                //Process all of the tags into the persistence object and send to storage, event if we do not find tags in the content
                var strings = TagProcessingBusinessLogic.ProcessOrdinalTagsFoundInEmailBodyText(Search, returnStrings, tags, ordinalTags, tagSetSize, true, true);

                //If we are only supposed to return matter related tags filter accordingly
                if (ReturnOnlyMattersTags)
                {
                    returnStrings = new List <string>();
                    //Iterate over the found tags searching for valid matter numbers
                    foreach (var item in strings)
                    {
                        if (MatterIdentificationBL.ValidateMatterID(Search.TagStartToken, item))
                        {
                            returnStrings.Add(item);
                        }
                    }
                }
                //otherwise return all found tags
                else
                {
                    returnStrings = strings;
                }
            }
            return(returnStrings);
        }
        public void DoesNotPrintEmailToSlackIfSlackChannelIsNull()
        {
            var escalationMessageBody = MessageParsingTests.EscalationMessageText;
            var email = new Email("a-subject", escalationMessageBody, EmailParser.GetSlackFormattedSummary(escalationMessageBody), "asdf", DateTime.Now,
                                  new List <string> {
                "*****@*****.**"
            }, true);

            var processor = new CompareTeamEmails(null, new Mock <ILabelPrinter>().Object);

            processor.Accept(email);
            CollectionAssert.IsEmpty(processor.ProcessTimerTick().Responses);
        }
        //парсим email, ищем заявку там
        string _getResultByEmail(long requestId, long startTime, string btcAddr, double rubAmount, string phoneFrom, string forwardtobtc, int dempingpercent, int forwardint, string forwardfraction)
        {
            //в течении следующих time_check_email_sec проверяем email
            long maxTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + App.settings.data.time_check_email_sec;

            while (DateTimeOffset.UtcNow.ToUnixTimeSeconds() < maxTime)
            {
                var emails = App.emailParser.GetLastByClient(App.LAST_PARSED_RATE.client);

                TicketClientCreateResponse ticketByEmail         = null;
                CreateResponse             createResponseByEmail = EmailParser.Find(emails, btcAddr, phoneFrom, out ticketByEmail);
                if (createResponseByEmail == null) //еще не пришло, ждем
                {
                    Thread.Sleep(500);
                    continue;
                }

                try
                {
                    if (forwardtobtc != null)
                    {
                        (new BtcAddressForwardModel(App.db))
                        .Create(btcAddr, forwardtobtc, dempingpercent, forwardint, forwardfraction);
                    }
                } catch (Exception e) { }

                try {
                    (new BtcAddressModel(App.db)).Create(startTime,
                                                         btcAddr,
                                                         ticketByEmail.account,    //phone to
                                                         ticketByEmail.comment,
                                                         ticketByEmail.btc_amount,
                                                         App.LAST_PARSED_RATE.GetClientNameOnPath(),
                                                         phoneFrom,
                                                         ticketByEmail.ip,
                                                         ticketByEmail.email);
                } catch (Exception e) { }

                createResponseByEmail.other = new List <KeyValuePair <string, string> > {
                    new KeyValuePair <string, string>("type_get", "complicated")
                }.ToArray();

                try {
                    (new LogRequestModel(App.db)).SetResponse(requestId, createResponseByEmail.toJson());
                } catch (Exception e) { }

                return(createResponseByEmail.toJson());
            }

            return(null); //после парсинга не даем переключаться на следующий клиент, всегда выходим
        }
Exemple #26
0
        private static string GetFirstMail(ref string addressList)
        {
            MailAddress address;

            if (EmailParser.TryParse(addressList, out address))
            {
                return(address.ToString());
            }

            string result = addressList;

            addressList = null;
            return(result);
        }
Exemple #27
0
        protected void RemoveAddress(MailAddressList recipients, string addrStr)
        {
            if (string.IsNullOrEmpty(addrStr) || recipients.Count == 0)
            {
                return;
            }

            var addresses = EmailParser.ParseAddresses(addrStr);

            foreach (MailAddress address in addresses)
            {
                recipients.Remove(address);
            }
        }
Exemple #28
0
        internal static bool IsOwnerEqualUser(PXGraph graph, CRSMEmail message, Guid?owner)
        {
            var @from = EmailParser.ParseAddresses(message.MailFrom).FirstOrDefault().With(_ => _.Address).With(_ => _.Trim());

            PXSelect <Users, Where <Users.email, Equal <Required <Users.email> > > > .Clear(graph);

            var usersEmail = (Users)PXSelect <Users, Where <Users.email, Equal <Required <Users.email> > > > .Select(graph, @from);

            if (usersEmail != null)
            {
                return(usersEmail.PKID == owner);
            }
            return(false);
        }
Exemple #29
0
        static void Main(string[] args)
        {/*/
          * string otp="";
          *
          * //To login in please use
          * Console.WriteLine(otp);
          *
          * Console.ReadLine();
          * /*/
            Logger.InitializeLogger();
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            var           enc1252       = Encoding.GetEncoding(1252);
            ClientFactory clientFactory = new ClientFactory();

            string emailAddr = ConfigurationManager.AppSettings.Get("email");
            string password  = ConfigurationManager.AppSettings.Get("password");
            string domain    = ConfigurationManager.AppSettings.Get("domain");
            string from      = ConfigurationManager.AppSettings.Get("from");
            string subject   = ConfigurationManager.AppSettings.Get("subject");
            //string hostName = ConfigurationManager.AppSettings.Get("gmailHostName");
            //string port = ConfigurationManager.AppSettings.Get("gmailPort");

            List <String> sentTo = new List <string>();

            sentTo.Add(emailAddr);

            IEmailClient client = (IEmailClient)clientFactory.CreateClient(domain);

            //EmailDetails email = new EmailDetails(client.ConnectAndAuthEmailClient
            // (emailAddr, password), from, sentTo, subject, domain);
            EmailDetails email = new EmailDetails(client.ConnectAndAuthEmailClient
                                                      (emailAddr, password, "test", 121), from, sentTo, subject, domain);
            // TRY OVERLOAD WITH PORT AND HOSTNAME

            EmailParser emailParser = new EmailParser();
            Message     msg         = email.GetEmailMsg(from, subject);

            String emailAsTxt = emailParser.ConvertEmailToTxt(msg);

            String otp = emailParser.ExtractOTP(emailAsTxt, "To login in please use");

            //String otp = emailHandler.ExtractOTP(emailAsTxt);


            Console.WriteLine(otp);

            Console.ReadLine();
            Logger.CloseTheFile();
        }
        public static void TestEmailParserExtractInvalidSpecialCharacters()
        {
            EmailParser parser = new EmailParser();

            IEnumerable <string> addresses = parser.Extract("[email protected] [email protected] test/[email protected] [email protected] [email protected]");

            Assert.That(addresses.Count(), Is.EqualTo(5));
            string[] list = addresses.ToArray();

            Assert.That(list[0], Is.EqualTo("*****@*****.**"));
            Assert.That(list[1], Is.EqualTo("*****@*****.**"));
            Assert.That(list[2], Is.EqualTo("*****@*****.**"));
            Assert.That(list[3], Is.EqualTo("*****@*****.**"));
            Assert.That(list[4], Is.EqualTo("*****@*****.**"));
        }