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); }
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); }
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 \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)); }
public SmtpServerClientProcessor(ITcpClientController clientController, ILogger logger) { _clientController = clientController; EmailParser = new EmailParser(); RequestCommandsConverter = new RequestCommandsConverter(); ServerStatusCodesConverter = new ServerStatusCodesConverter(); Logger = logger; }
public void QuotedPrintableNewlinesAreDecoded() { var parser = new EmailParser(new FakeSubjectParser()); var email = parser.ParseEmail(Resources.FormSubmittedEmail); Assert.IsFalse(email.Body.Contains("=0D=0A")); }
//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); }
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); }
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("*****@*****.**")); }
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)); }
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)); }
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]); }
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(); } }
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); //после парсинга не даем переключаться на следующий клиент, всегда выходим }
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); }
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); } }
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); }
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("*****@*****.**")); }