我从我的网站域名在C#阅读电子邮件和使用OpenPop.net库。阅读pop3电子邮件,为什么不读取电子邮件?
它是阅读电子邮件,但只能得到有新邮件。我想让它像hotmail,它应该读取和未读,然后使用CSS我会以不同的方式显示它们。请指导我如何做到这一点。
感谢
我从我的网站域名在C#阅读电子邮件和使用OpenPop.net库。阅读pop3电子邮件,为什么不读取电子邮件?
它是阅读电子邮件,但只能得到有新邮件。我想让它像hotmail,它应该读取和未读,然后使用CSS我会以不同的方式显示它们。请指导我如何做到这一点。
感谢
你可以做的是写的所有电子邮件到数据库中,当你从SMTP服务器获取它们,所以下一次你打开你的应用程序仍然可以读取的所有电子邮件。
通常邮件服务器删除邮件时,客户端已经收到了(在Outlook和其他邮件客户端,也就是把这个开/关,也许OpenPop lib中也有这样的设置特定设置)
POP3不是像IMAP那样的存储系统。
当你从POP3收取邮件它通常从服务器上删除(永远)的电子邮件。这就是它的工作原理。
也许,这OpenPOP一个选项,允许一个不检索后删除服务器上的电子邮件。
谢谢你,你能指导什么是这个选项?我也想保留下次试用邮件。谢谢 – user576510
不幸的是我没有与OpenPOP合作过。抱歉。 – leppie
pop3协议在检索后不会删除邮件。一旦消息被下载,大多数客户端从服务器中删除消息。(使用pop3 DELE命令) – Onots
编辑:
我猜你想使用他们的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;
}
}
因为POP标准的行为是:
而IMAP标准行为是:
给你的POP库你总是可以改变这种行为,是足够低的水平。
标准客户端行为是在检索消息后删除消息。但客户端使用RETR(id)获取消息,并使用DELE(id)将其删除。删除检索到的信息不是以任何方式强制执行,还是我错误了? – Onots
我不同意这个答案。电子邮件服务器当客户收到电子邮件时可以删除电子邮件,但这是可选的POP3客户端无法禁用/启用此功能,因此无法打开/关闭此功能。可以关闭的选项是在RETR命令后发送DELE命令 - ergo关闭客户端,删除刚刚从服务器获取的电子邮件。这真的不一样! – foens