OpenPop удаление сообщений

Когда я пытаюсь удалить сообщение, оно удаляет 4 за раз, хотя я прямо заявляю об обратном, поскольку у меня около 700 сообщений, мне пришлось отображать максимум 4.

public void inboxupdate()
    {
        client.Connect("pop.googlemail.com", 995, true);
        if (client.Connected)
        {
            client.Authenticate(tbxEmail.Text, tbxPassword.Text, OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword);
        }
        int MessageCount = client.GetMessageCount();

        for (int i = 1; i <= 4; i++ )
        {
            try
            {
                cbxInbox.Items.Add(client.GetMessage(i).ToMailMessage().Subject, false);
            }
            catch
            {
            }
        }
    }

Код для удаления:

private void btnDelete_Click(object sender, EventArgs e)
    {
        if (cbxInbox.CheckedItems.Count > 1)
        {
            for (int i = 1; i <= cbxInbox.CheckedItems.Count; i++)
            {
                client.DeleteMessage(i + 1);
            }
        }
        cbxInbox.Items.Clear();
        client.Disconnect();
        inboxupdate();
    }

Даже когда я

client.DeleteMessage(1)

Он удаляет 4 за раз. Кроме того, эти сообщения выглядят старыми, поскольку они не отображаются на первой странице, когда я захожу на mail.google.com. Есть ли способ отличить спам от сообщений?


person user2319683    schedule 14.08.2013    source источник


Ответы (1)


В Gmail есть забавная реализация POP3. После того, как вы загрузите сообщение, оно не будет отображаться для вас в следующий раз. Таким образом, ваша проблема, скорее всего, не в том, что OpenPop удаляет 4 сообщения, а в том, что вы загружаете 4 сообщения, которые Gmail затем скрывает от вас.

См. Какие нестандартные особенности поведения показывает ли Gmail, когда он программно используется в качестве сервера POP3?

В качестве примечания: в следующий раз, когда вы зададите вопрос, пожалуйста, уделите время тому, чтобы задать его, очистить его. Например, почему вы включили закомментированный код?

Второе примечание. Приведенные ниже коды не учитывают, какие сообщения «помечены» как подлежащие удалению. Не стоит ли искать индекс? Вы всегда удаляете первые n элементы, если пользователь выбрал n элементов, но что, если он выбрал n последние элементы?

if (cbxInbox.CheckedItems.Count > 1)
{
    for (int i = 1; i <= cbxInbox.CheckedItems.Count; i++)
    {
        client.DeleteMessage(i + 1);
    }
}

Надеюсь, это поможет.

person foens    schedule 14.08.2013
comment
Сообщения помечаются тем, отмечены ли они флажком cbxInbox. - person user2319683; 14.08.2013
comment
Значит, команда удаления будет работать, если я вместо этого войду в свой хотмэйл? - person user2319683; 14.08.2013
comment
О, похоже, он читает самые старые электронные письма как номер один, как мне прочитать последнее? - person user2319683; 14.08.2013
comment
В любом случае OpenPop отправляет на сервер только одну команду DELETE. Сервер решает, как он представляет вам свои сообщения. - person foens; 14.08.2013