Это исключение возникает для учетной записи IMAP, если я собираюсь сохранить почтовый элемент в надстройке Outlook.Это происходит, когда я изменяю пользовательские свойства предыдущих сообщений в цепочке во время пересылки / ответа на почту.
Я прошел через это https://answers.microsoft.com/en-us/msoffice/forum/msoffice_outlook-mso_win10-mso_2016/the-operation-cannot-be-performed-because-the/ba4fa59e-0813-4874-b122-10bcf6e586af?page=1 и попробовал решения @Vijay_Verma, но это не такработа для меня.
Вот мой код:
private void DraftItems_ItemAdd(object Item)
{
try
{
Outlook.MailItem mailItem = Item as Outlook.MailItem;
Outlook.UserProperty mailUserProperty = mailItem.UserProperties?.Find("ABC");
Outlook.Folder mailItemfolder = mailItem.Parent as Outlook.Folder;
string emailId = mailItemfolder.Store.DisplayName;
List<string> entryIdsInConvn = GetEmailsInConversation(mailItem.ConversationID, emailId);
if (entryIdsInConvn != null && entryIdsInConvn.Count > 0)
{
Outlook.Folder inboxFolder = null;
Outlook.NameSpace nameSpace = null;
if (mailItemfolder != null)
{
nameSpace = Application.GetNamespace("MAPI");
inboxFolder = mailItemfolder.Store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
foreach (string entryId in entryIdsInConvn)
{
Outlook.MailItem mi = null;
try
{
mi = nameSpace.GetItemFromID(entryId, inboxFolder.StoreID) as Outlook.MailItem;
if (mi != null)
{
AddUserProperty(mi, mailUserProperty.Value);
}
}
finally
{
if (mi != null)
Marshal.ReleaseComObject(mi);
}
}
if (inboxFolder != null)
Marshal.ReleaseComObject(inboxFolder);
if (nameSpace != null)
Marshal.ReleaseComObject(nameSpace);
}
}
if (mailUserProperty != null)
Marshal.ReleaseComObject(mailUserProperty);
}
catch (Exception ex)
{ }
}
public void AddUserProperty(Outlook.MailItem mailItem, string Id)
{
Outlook.UserProperties mailUserProperties = null;
Outlook.UserProperty mailUserProperty = null;
try
{
mailUserProperties = mailItem.UserProperties;
mailUserProperty = mailUserProperties.Find("ABC");
if (null == mailUserProperty)
{
mailUserProperty = mailUserProperties.Add("ABC", Outlook.OlUserPropertyType.olText, false, 1);
}
mailUserProperty.Value = Id;
mailItem.Save(); //Exception here
}
catch (Exception ex)
{
//The operation cannot be performed because the message has been changed
}
finally
{
if (mailUserProperty != null)
{
Marshal.ReleaseComObject(mailUserProperty);
}
if (mailUserProperties != null)
{
Marshal.ReleaseComObject(mailUserProperties);
}
}
}
здесь я отвечаю на почту, затем добавляю свойство пользователя и сохраняю его и на событие DraftItemAdd, добавляю свойства пользователя в другие письмав разговоре.
Может кто-нибудь сказать мне, что может быть причиной этого исключения?Заранее спасибо!