#c# #vsto #outlook-addin
#c# #vsto #outlook-добавление
Вопрос:
Это исключение возникает для учетной записи 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 amp;amp; 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 добавляю свойства пользователя к другим письмам в диалоге.
Кто-нибудь может сказать мне, что может быть причиной этого исключения? Заранее спасибо!
Комментарии:
1. Пожалуйста, не могли бы вы опубликовать свой код и получаемое исключение, чтобы мы могли попытаться вам помочь
2. Где и когда вы пытаетесь сохранить элемент? Выполняете ли вы операцию сохранения в главном потоке?
3. Спасибо @TomHalson, я опубликовал код
4. @EugeneAstafiev здесь я отвечаю на mail -> добавление свойства пользователя -> его сохранение -> на событие DraftsItemAdd, добавляя свойство пользователя к его родительской почте (т. Е. почте в том же разговоре), а затем во время MailItem.Save () я получил это исключение. Да, это в основном потоке. Спасибо!
5. после обнаружения этого исключения попробуйте прочитать какое-либо свойство, затем сохраните как var s=mail.Subject; mail.Save();