Member 13427032 Ответов: 1

Я получаю только одну запись на 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.

1 Ответов

Рейтинг:
8

F-ES Sitecore

Этот код не делает того, что вы думаете

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());


Первая строка задает переменной "Subject" значение item.Subject и добавляет результат этой переменной в список. То же самое с отправителем и т. д. Если вы посмотрите на EmailList это будет список строк типа

"тема 1"
"отправитель 1"
"дата r 1"
"дата s 1"
"тема 2"
"отправитель 2"
"дата r 2"
"дата 2"

В вашем цикле, когда вы добавляете это в datatable

foreach (string item in email.EmailList)
{
               
    dt.Rows.Add(email.Subject, email.Sender, email.DateSent, email.DateReceive);
}


Вы получаете строку из списка рассылки в "элемент", но ничего с ней не делаете. Вместо этого вы добавляете "email.Subject" и т. д., И, как обсуждалось выше, email.Subject будет последним субъектом, который вы добавили при обновлении списка рассылки, поскольку ваш цикл обновляет переменную Subject с каждой итерацией, оставляя ее с последним значением, обновленным в вашем цикле.

Вместо этого вы, вероятно, хотите добавить сам "элемент" в свой первый цикл

foreach (Item item in findResults.Items)
{
    if (findResults.ToString() != "")
    {
        EmailList.Add(item);
    }
}


Затем обновите свой другой цикл

foreach (Item item in email.EmailList)
{
    dt.Rows.Add(item.Subject, item.DisplayTo.ToString(), item.DateSent.ToString(), email.DateReceive.ToString());
}


Member 13427032

когда я попытался добавить EmailList.Add(item); а также обновить это (Item item in email.EmailList), я получил ошибку не удается преобразовать из 'Microsot.Обмен.Веб-Сервисы.Данные.Пункт' в строку

F-ES Sitecore

Вам нужно изменить список электронной почты из списка<string> В список<Item>

Member 13427032

Большое вам спасибо за помощь, я просто новичок здесь в веб-разработке, хе-хе-хе. Могу ли я получить предложение по улучшению своих навыков в веб-разработке? большое вам спасибо и благослови вас Господь

F-ES Sitecore

Вы просто учитесь, делая действительно, это требует времени, но каждая проблема, с которой вы сталкиваетесь и преодолеваете, - это приобретенное знание.

Member 13427032

я имею в виду что бы вы предложили улучшить мои навыки в программировании

Member 13427032

Привет сэр Добрый день я добавил строку сватовства для отображения ошибок из электронной почты как я могу добавить строку сватовства к элементу, чтобы отобразить его в gridview спасибо.

вот мой код
Результаты поиска = обслуживание.В Разделе Finditems(WellKnownFolderName.Входящие сообщения, compoundFilter, просмотр);
по каждому элементу (элемент в Результаты поиска.Предметы)
{

если (результаты поиска.Метод toString() != "")
{
EmailList.Добавить(элемент);
товар.Загрузить();

строка Sender = item.DisplayTo;
строка Subject = item.Subject;
строка DateCreated = item.Дата и время созданы.Метод toString();

//Отображение тела электронной почты
PropertySet itemProperty = новый набор свойств();
itemProperty.RequestedBodyType = BodyType.Text;
itemProperty.Добавить(ItemSchema.Тело);
PropertySet FindItemPropertySet = новый PropertySet(BasePropertySet.Значение idonly);
вид.Propertyset В = FindItemPropertySet;
Propertyset в GetItemsPropertySet = новый propertyset в(BasePropertySet.FirstClassProperties);
GetItemsPropertySet.RequestedBodyType = BodyType.Text;
если (результаты поиска.Предметы.Count > 0)
{
обслуживание.LoadPropertiesForItems(Результаты поиска.Элементы, GetItemsPropertySet);
по каждому элементу (элемент в Результаты поиска.Предметы)
{

var EmailBody = Item.Body.Текст;
var pattern = new[] { "удаленный сервер вернул '554 5.4.4 SMTPSEND.DNS.NonExistentDomain; несуществующий домен",
"Либо нет никаких альтернативных хостов, либо не удалось доставить все альтернативные хосты",
"Удаленный сервер вернул' 550 нет такого Пользователя здесь",
"5.2.3 smtp;550 5.2.3 RESOLVER.RST.SendSizeLimit.Org; сообщение слишком большое для этой организации",
"5.1.10 smtp;550 5.1.10 RESOLVER.ADR.RecipientNotFound; получатель user@contoso.com не найден при поиске SMTP-адреса",
"Удаленный сервер вернул очередь '550 4.4.7.Истек срок действия; сообщение истек срок действия'",
"Удаленный хост сказал: 550-5.1.1 учетная запись электронной почты, с которой вы пытались связаться, не существует",};
//var found = pattern.Любой(p => EmailBody.Содержит(p));

string matchingMessage = строка.Пустой;
var found = pattern.Любой(m => {
var match = EmailBody.Содержит(м);
если (совпадение)
matchingMessage = м;
ответный матч;
});
заранее благодарю вас сэр