I want to count unread messages.
If I've open unread message, executes this code
Code:
public MailDataSet.MailDataSet GetMessageById(int Id, bool hasSeen)
{
Message mes = accountHelper.Messages.get_ItemByDBID(Id);
bool b = mes.get_Flag(eMessageFlag.eMFSeen);
//if opened unread message
if (hasSeen && !b)
{
//set flag. It realy set I check its in DB
mes.set_Flag(eMessageFlag.eMFSeen, hasSeen);
mes.Save();
}
return Converter.ToMessageDataTable(accountHelper.Messages.get_ItemByDBID(Id), this._attachmentPath);
}
ToMessageDataTable - converts messages/message to my typedDataSet
After I need to get messages from INBOX folder(I have only INBOX, SENT, DELETED, SPAM folder, no subfolders)
Code:
public MailDataSet.MailDataSet GetMessagesByIMAPFolder(int folderId)
{
return ToMessageDataTable(accountHelper.IMAPFolders.get_ItemByDBID(folderId).Messages);
}
//copy all properties from message to MailDataSet.MailDataSet.MessageRow row
public MailDataSet.MailDataSet.MessageRow ToMessageRow(Message message, MailDataSet.MailDataSet.MessageRow row)
{
//here copy props. don't show all because it doesn't matter
row.ID = message.ID;
row.HasSeen = message.get_Flag(eMessageFlag.eMFSeen);
bool b = this.accountHelper.Messages.get_ItemByDBID(message.ID).get_Flag(eMessageFlag.eMFSeen);
//here in case when it's before updated message b=true, row.HasSeen = false;
//In DB mesageflag = 1;
row.Headers = message.Headers.ToString();
row.HTMLBody = message.HTMLBody;
row.FromAddress = message.FromAddress;
row.To = message.To;
return row;
}
public MailDataSet.MailDataSet ToMessageDataTable(Messages messages)
{
MailDataSet.MailDataSet dataSet = new MailDataSet.MailDataSet();
MailDataSet.MailDataSet.MessageDataTable tbl = dataSet.Message;
for (int i = 0; i < messages.Count; i++)
{
//just add new row
tbl.AddMessageRow(ToMessageRow(messages[i], tbl.NewMessageRow()));
}
return dataSet;
}
I don't understand why I get difference values from identic messages?
I check it every time after setting flag.
After restarting hMailServer, I get identical values in both cases. But after setting flag situation repeated