2012-10-26 47 views
3

任何熟悉MailSystem.NET的人?MailSystem.NET IMAP4,将邮件标记为未读

我有一个应用程序定期检查一个Gmail邮件帐户的新邮件。如果主题标题包含特定短语,则采取行动。不过,我需要稍微修改该应用,以将某些邮件标记为未读。

这里是现有的代码。点击按钮调用logInLogOut()子并启动一个定时器,该定时器负责通过调用另一个线程中的checkNewMail()子来定期检查新邮件。该应用程序按预期工作,但以下可能不是最好的方式。

private void logInLogOut() 
{ 
    try 
    { 
     Client.ConnectSsl(txtIMAPServer.Text, int.Parse(txtIMAPPort.Text)); 
     Client.Login(@txtUserName.Text, txtPassword.Text); 
     globalClientConnected = true; 

    } 
    catch (Exception ex) 
    { 
     globalClientConnected = false; 

    } 
}  


private void checkNewMail() 
{ 
    if (globalClientConnected) 
    { 
     foreach (ActiveUp.Net.Mail.Message email in GetUnreadMails("Inbox")) 
     { 
      string from = parseEmailAddress(email.From.ToString()); 
      string subject = email.Subject; 
      string receivedDateTime = email.ReceivedDate.Date.ToString() 

      string updateString = receivedDateTime + ", " + from + ", " + subject + "\r\n"; 

      if (subject.Contains("ABC")) 
      { 
       string to = from; 

       try 
       {    
        //do something 
       } 
       catch (Exception ex) 
       { 
        //bla bla 
       } 
      } 
      else 
      { 
       //If mail subject not like "ABC" 
       //Do something else 

       //Mark the mail as unread 
      } 
     } 


    } 


} 

回答

2

不熟悉它,但他们在源代码中有一个例子。

 Imap4Client imap = new Imap4Client(); 
     imap.Connect("mail.myhost.com"); 
     imap.Login("jdoe1234","tanstaaf"); 
     Mailbox inbox = imap.SelectInbox("inbox"); 
     FlagCollection flags = new FlagCollection(); 
     flags.Add("Read"); 
     flags.Add("Answered"); 
     inbox.AddFlags(1,flags); 

//Message is marked as read and answered. All prior flags are unset. 
     imap.Disconnect(); 
+0

那么谢谢你的!当你第二次看时,你会发现很惊人的东西:) – user1776480

0

诀窍是取消设置“Seen”标志。有一种方法可以删除标志:RemoveFlags()。你只需要你想从中删除标志的消息的ID。

var imap = new Imap4Client(); 
imap.ConnectSsl(hostname, port); 
imap.Login(username, password); 

var inbox = imap.SelectMailbox("inbox"); 
var ids = inbox.Search("UNSEEN"); 
foreach (var messageId in ids) 
{ 
     var message = inbox.Fetch.MessageObject(messageId); 
     // process message 

     var flags = new FlagCollection { "Seen" }; 
     inbox.RemoveFlagsSilent(messageId, flags); 
} 
相关问题