簡體   English   中英

如何將gmail消息標記為未讀(看不見)MailSystem.NET

[英]How mark gmail message as unread (unseen) MailSystem.NET

我搜索了很多如何從gmail閱讀電子郵件,然后將其標記為未讀(看不見),現在我發現我想與大家分享。

使用庫http://mailsystem.codeplex.com/

資料來源: http//mailsystem.codeplex.com/discussions/269058

添加引用:activeup.net.common,activeup.net.imap4,activeup.net.mail

碼:

        Imap4Client imap = new Imap4Client();
        imap.ConnectSsl("imap.gmail.com", 993);
        imap.Login("aaaaa@gmail.com", "xxxxxxx");

        imap.Command("capability");

        Mailbox inbox = imap.SelectMailbox("inbox");
        int[] ids = inbox.Search("UNSEEN");
        if (ids.Length > 0)
        {
            ActiveUp.Net.Mail.Message msg_first = inbox.Fetch.MessageObject(ids[0]);

            //ignore this gmail_data stuff // undefined in this scope // checking to make sure it's a "new" unread msg
            //if (gmail_data != msg_first.Date.ToString())
            //{
               // gmail_data = msg_first.Date.ToString();

                XElement xmail = new XElement("gmail",
                    new XAttribute("count", ids.Length.ToString()),
                    new XAttribute("modified", msg_first.Date.ToString())
                );

                string name = "", address = "", from = "";
                Regex reg_name = new Regex("\"[^\"]+");
                Regex reg_address = new Regex("<[^>]+");

                ActiveUp.Net.Mail.Message msg = null;

                for (var i = 0; i < ids.Length; i++)
                {
                    msg = inbox.Fetch.MessageObject(ids[i]);

                    from = msg.HeaderFields["from"];
                    name = reg_name.Match(from).Value.Replace("\"", "");
                    address = reg_address.Match(from).Value.Replace("<", "");

                    xmail.Add(new XElement("entry",
                        new XAttribute("id", msg.MessageId),
                        new XAttribute("modified", msg.Date.ToString()),
                        new XAttribute("name", name),
                        new XAttribute("address", address),
                        new XElement("subject", msg.Subject),
                        new XElement("body-text", msg.BodyText.TextStripped),
                        new XElement("body-html", msg.BodyHtml.Text)
                    ));
                    //mark as unread
                    var flags = new FlagCollection();
                    flags.Add("Seen");
                    inbox.RemoveFlags(ids[i], flags);
                }


                File.WriteAllText("gmail.xml", xmail.ToString());


            }
        }
  • 當您從服務器收到所有電子郵件時,API會自動將所有電子郵件標記為“已查看/已退出”,我認為無法使用messageId過濾“搜索方法”,因此您必須收到所有電子郵件,以便將一封(看過)的電子郵件標記為未讀。
  • 你應該只是“未讀的按摩”,並在列表中添加要標記為“未讀”的電子郵件的messageId,然后你必須將列表傳遞給下面的方法,這將標記為未讀列表中的所有消息。

可能的代碼:

    public void MarkAsUnread(List<string> messageIdList)
    {
        Mailbox inbox = Client.SelectMailbox("inbox");
        int[] ids = inbox.Search("ALL");
        int ListCount = messageIdList.Count;
        int MarkedAsUnread = 0;

        if (ids.Length > 0)
        {
            ActiveUp.Net.Mail.Message msg = null;
            for (var i = 0; i < ids.Length; i++)
            {
                msg = inbox.Fetch.MessageObject(ids[i]);
                // if messageId is on the list, mark as unread.
                if (String.Join(",", messageIdList).Contains(msg.MessageId))
                {                        
                    var flags = new FlagCollection { "Seen" };
                    inbox.RemoveFlagsSilent(i+1, flags);
                    MarkedAsUnread = MarkedAsUnread + 1;
                }

                // optimization
                if (MarkedAsUnread == ListCount)
                {
                    break;
                }
            }
        }            
    }

*如果你真的不想得到所有,也許你可以使用類似的代碼按日期過濾:

var box = imap.SelectMailbox("inbox");
var ids = box.Search("OR (CC @cc.lieser-online.de) (HEADER Envelope-To @cc.lieser-online.de)");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM