Я получаю только одну запись на gridview
Я работаю над EWS, чтобы получить всю недоставленную электронную почту, и на консоли она показывает всю недоставленную электронную почту, но на gridview она показывает только одну запись, и эта запись была первой. И вот мой код. Пожалуйста, помогите мне с моей работой.
protected void Button1_Click(object sender, EventArgs e) { EmailMethods email = new EmailMethods(); email.EmailServer = "https://SampleEWSEmail.asmx"; email.AccountName = ConfigurationManager.AppSettings["Account"]; email.Password = ConfigurationManager.AppSettings["Secret"]; email.Domain = ConfigurationManager.AppSettings["Domain"]; email.GetEmails(); DataTable dt = new DataTable(); dt.Columns.Add("Subject", typeof(string)); dt.Columns.Add("Sender", typeof(string)); dt.Columns.Add("DateSent", typeof(string)); dt.Columns.Add("DateReceive", typeof(string)); foreach (string item in email.EmailList) { dt.Rows.Add(email.Subject, email.Sender, email.DateSent, email.DateReceive); } GridView1.DataSource = dt; GridView1.DataBind(); } }
Что я уже пробовал:
И вот код, чтобы получить все недоставленные письма.
<pre> public void GetEmails() { if (EmailServer != "" && AccountName != "" && Password != "") { try { EmailList = new List<string>(); ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); service.Credentials = new WebCredentials(AccountName, Password, Domain); service.Url = new Uri(EmailServer); DisplayErrorEmails(service); } catch (Exception ex) { Status = "Error: " + ex.Message; } } else { Status = "Please provide the Email Server, Account Name and Password."; } } <pre lang="c#"><pre> private bool DisplayErrorEmails(ExchangeService service) { try { FindItemsResults<item> findResults; SearchFilter.SearchFilterCollection compoundFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or); compoundFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.Body, "Sorry, I couldn't find any host named", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The server is unable to connect", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Your outgoing message timed out because of issues concerning the incoming server.", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Invalid characters", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Access denied, spam abuse detected", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Access denied, banned sender", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The email account that you tried to reach does not exist", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The domain name in the email address is incorrect", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Host unknown or Domain lookup failed", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Mailbox full or Quota exceeded", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Mailbox unavailable", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Mailbox not found, Invalid mailbox, or User unknown", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A time-out occurred while communicating with the server", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Timeout connection problem: there have been issues during the message transfer", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Connection refused or inability to open an SMTP stream", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The server cannot verify the user, but it will try to deliver the message anyway", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The service is unavailable due to a connection problem: it may refer to an exceeded limit of simultaneous connections, or a more general temporary problem", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The recipient's mailbox has exceeded its storage limi", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The recipient's Exchange Server incoming mail queue has been stopped", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The recipient's server is not responding", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The connection was dropped during the transmission", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The maximum hop count was exceeded for the message: an internal loop has occurred", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A routing error", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Your ISP's server or the server that got a first relay from yours has encountered a connection problem", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Too many emails sent or too many recipients: more in general, a server storage limit exceeded", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "An error of your mail server, often due to an issue of the local anti-spam filter", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A syntax error: the server couldn't recognize the command", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The command is not implemented", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The server has encountered a bad sequence of commands, or it requires an authentication", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A command parameter is not implemented", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Bad email address", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A DNS error: the host server for the recipient's domain name cannot be found", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Address type is incorrect: another problem concerning address misspelling.In few cases, however, it's related to an authentication issue", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The total size of your mailing exceeds the recipient server's limits", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A problem occurred while delivering this message to this email address", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "This message hasn't been delivered yet", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The server could not be found", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Outlook is unable to connect to your outgoing (SMTP) e-mail server", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "The operation timed out waiting for a response from the receiving (POP) server", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "A time-out occurred while communicating with the server", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Delivery has failed to these recipients or groups", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); compoundFilter.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "Delivery is delayed to these recipients or groups", ContainmentMode.ExactPhrase, ComparisonMode.IgnoreCaseAndNonSpacingCharacters)); MailMessage msg = new MailMessage(); //Displays the result ItemView view = new ItemView(100); do { findResults = service.FindItems(WellKnownFolderName.Inbox, compoundFilter, view); foreach (Item item in findResults.Items) { if (findResults.ToString() != "") { EmailList.Add(Subject = item.Subject.ToString()); Console.WriteLine("Subject: " + item.Subject.ToString()); EmailList.Add(Sender = item.DisplayTo.ToString()); EmailList.Add(DateReceive = item.DateTimeReceived.ToString()); EmailList.Add(DateSent = item.DateTimeSent.ToString()); } } if (findResults.NextPageOffset != null) { view.Offset = (int)findResults.NextPageOffset; } } while (findResults.MoreAvailable); Status = "list of undelivered email."; return true; } catch (Exception ex) { Status = "Error: " + ex.Message; return false; } }
F-ES Sitecore
Что происходит, когда вы проходите через код в отладчике? Сколько элементов находится в списке email.EmailList? Сколько строк вы в конечном итоге получаете в dt?
Member 13427032
он подсчитывает весь результат, когда я его отлаживаю, и показывает более 20+ строк с одной и той же записью, и это первая запись.
Member 13427032
это точно так же, как вращаться на первой пластинке, а не просто подниматься на других пластинках.
Тема адрес электронной почты получатель дата и время отправки дата и время получения
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
Не удается доставить: CRM-системы fdgdfgfdgf@fsfa.com 11/30/2017 9:15:11 вечера 11/30/2017 9:15:11 вечера
это показано на gridview, и это в общей сложности 20+
Dave Kreskowiak
Просто фильтр поиска и посмотреть, что вы получаете. Этот фильтр, скажем так, ужасен по своей сложности и кодировке. Это первое место, о котором я бы позаботился, увидев, что именно он возвращает. Сбейте его только до одного условия, чтобы увидеть, что вы получите, затем добавьте одно и попробуйте снова.
Member 13427032
ладно, спасибо, я попробую.
Dave Kreskowiak
Итак, ваш звонок в FindItems, похоже, возвращает 20 предметов. Шагайте по коду в отладчике, строка за строкой и следуйте ему. Он делает что-то, чего вы не ожидаете, поэтому используйте отладчик, чтобы выяснить, почему.
Например, я понятия не имею, почему вы вызываете ToString() в findResults, а затем сравниваете его с пустой строкой. Это просто глупо, так как вы уже находитесь в цикле, который перечисляет findItems. Вам вообще не нужно это утверждение if.