2011-07-28 131 views
1

我从我的网站域名在C#阅读电子邮件和使用OpenPop.net库。阅读pop3电子邮件,为什么不读取电子邮件?

它是阅读电子邮件,但只能得到有新邮件。我想让它像hotmail,它应该读取和未读,然后使用CSS我会以不同的方式显示它们。请指导我如何做到这一点。

感谢

回答

0

你可以做的是写的所有电子邮件到数据库中,当你从SMTP服务器获取它们,所以下一次你打开你的应用程序仍然可以读取的所有电子邮件。

通常邮件服务器删除邮件时,客户端已经收到了(在Outlook和其他邮件客户端,也就是把这个开/关,也许OpenPop lib中也有这样的设置特定设置)

+0

我不同意这个答案。电子邮件服务器当客户收到电子邮件时可以删除电子邮件,但这是可选的POP3客户端无法禁用/启用此功能,因此无法打开/关闭此功能。可以关闭的选项是在RETR命令后发送DELE命令 - ergo关闭客户端,删除刚刚从服务器获取的电子邮件。这真的不一样! – foens

2

POP3不是像IMAP那样的存储系统。

当你从POP3收取邮件它通常从服务器上删除(永远)的电子邮件。这就是它的工作原理。

也许,这OpenPOP一个选项,允许一个不检索后删除服务器上的电子邮件。

+0

谢谢你,你能指导什么是这个选项?我也想保留下次试用邮件。谢谢 – user576510

+0

不幸的是我没有与OpenPOP合作过。抱歉。 – leppie

+0

pop3协议在检索后不会删除邮件。一旦消息被下载,大多数客户端从服务器中删除消息。(使用pop3 DELE命令) – Onots

1

编辑:

我猜你想使用他们的POP3从Gmail检索邮件。 Gmail有一些奇怪的非标准POP3行为。 Gmail将隐藏已检索到,而忽略POP3 DELE命令消息。有关此行为的更多信息,请参阅this related question

之一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

因为POP标准的行为是:

  • 下载消息
  • 删除消息

而IMAP标准行为是:

给你的POP库
  • 下载消息
  • 假消息有

你总是可以改变这种行为,是足够低的水平。

+0

标准客户端行为是在检索消息后删除消息。但客户端使用RETR(id)获取消息,并使用DELE(id)将其删除。删除检索到的信息不是以任何方式强制执行,还是我错误了? – Onots