читая электронные письма pop3, почему бы не получить прочитанные электронные письма? - PullRequest
1 голос
/ 28 июля 2011

Я читаю электронные письма с моего веб-домена в C # и использую библиотеку OpenPop.net.

Он читает почту, но получает только новые письма. Я хочу сделать это как hotmail так, чтобы он получал прочитанные и непрочитанные оба, тогда с помощью CSS я буду отображать их по-разному. Пожалуйста, покажите мне, как я могу это сделать.

спасибо

Ответы [ 4 ]

2 голосов
/ 28 июля 2011

POP3 не является системой хранения, подобной IMAP.

Когда вы получаете почту из POP3, она обычно удаляет почту с сервера (навсегда). Вот как это работает.

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

2 голосов
/ 28 июля 2011

Edit:

Я предполагаю, что вы пытаетесь получить почту из Gmail, используя их POP3. В Gmail странное нестандартное поведение POP3. Gmail будет скрывать полученные сообщения и игнорирует команду POP3 DELE. См. этот связанный вопрос для получения дополнительной информации об этом поведении.

Один из примеров Openpop показывает, как получить все сообщения:

/// <summary>
/// Example showing:
///  - how to fetch all messages from a POP3 server
/// </summary>
/// <param name="hostname">Hostname of the server. For example: pop3.live.com</param>
/// <param name="port">Host port to connect to. Normally: 110 for plain POP3, 995 for SSL POP3</param>
/// <param name="useSsl">Whether or not to use SSL to connect to server</param>
/// <param name="username">Username of the user on the server</param>
/// <param name="password">Password of the user on the server</param>
/// <returns>All Messages on the POP3 server</returns>
public static List<Message> FetchAllMessages(string hostname, int port, bool useSsl, string username, string password)
{
    // The client disconnects from the server when being disposed
    using(Pop3Client client = new Pop3Client())
    {
        // Connect to the server
        client.Connect(hostname, port, useSsl);

        // Authenticate ourselves towards the server
        client.Authenticate(username, password);

        // Get the number of messages in the inbox
        int messageCount = client.GetMessageCount();

        // We want to download all messages
        List<Message> allMessages = new List<Message>(messageCount);

        // Messages are numbered in the interval: [1, messageCount]
        // Ergo: message numbers are 1-based.
        for(int i = 1; i <= messageCount; i++)
        {
            allMessages.Add(client.GetMessage(i));
        }

        // Now return the fetched messages
        return allMessages;
    }
}
1 голос
/ 28 июля 2011

Поскольку стандартное поведение POP:

  • скачать сообщение
  • удалить сообщение

при стандартном поведении IMAP:

  • скачать сообщение
  • оставить сообщение там

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

0 голосов
/ 28 июля 2011

Что вы можете сделать, это записать все электронные письма в базу данных, когда вы извлекаете их с сервера smtp, поэтому в следующий раз, когда вы откроете свое приложение, вы все равно сможете прочитать все электронные письма.

Обычно почтовые серверы удаляют почту, когда клиент ее получил (в Outlook и других почтовых клиентах есть специальная настройка для включения / выключения этой функции, возможно, в OpenPop lib также есть настройка для этого)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...