2016-04-26 11 views
1

Я разрабатываю addin, который должен хранить некоторые данные на почтовых отправлениях. Я использую библиотеку Redemption и метод MAPI.Utils HrSetOneProp.Пользовательское свойство MAPI_E_OBJECT_CHANGED

Только в Outlook 2016 я получаю «Ошибка в IMAPIProp :: SaveChanges: MAPI_E_OBJECT_CHANGED» каждый раз, когда я делаю второй вызов метода на том же самом почтовом ящике.

Пробовал использовать объекты RDO Redemption, а также простой OOM с теми же результатами.

Вот пример:

SafeMailItem m = RedemptionGM9.SafeMailItem; 
m.Item = mailItem; // this mailitem came as parameter in the function and it is the activeExplorer slection  
MAPIUtils utils = RedemptionGM9.MAPIUtils; 

string sGUID = PS_PUBLIC_STRINGS.ToString("B"); 
int iID = m.GetIDsFromNames(sGUID, GMLINK); 
if (iID != 0) 
{ 
    //this is the method that is failing every second time for the same mailitem until you restart outlook. 
    utils.HrSetOneProp(mailItem.MAPIOBJECT, iID, bForceGMPropTrue ? true : !String.IsNullOrEmpty(sAccNo), true); 
} 

Marshal.ReleaseComObject(utils); 
utils = null; 
Marshal.ReleaseComObject(m); 
m = null; 

//mailitem com object is released outside this method 
+0

пожалуйста, проверьте [mcve] ans [ask] – Claudius

+0

Каков соответствующий фрагмент кода? –

+0

там я добавил фрагмент кода –

ответ

0

Во-первых, объект MAPIUtils является устаревшим, и нет никаких причин, чтобы использовать его - safeMailItem реализует те же методы (safeMailItem.GetIdsFromNames/Поля []).

Во-вторых, почему вы передаете true (Сохранить) для второго параметра в MAPIUtils.HrSetOneProp? Не хотите ли вы, чтобы Outlook сохранял элемент каждый раз, когда пользователь хочет это сделать?

Откуда появляется MailItem?

+0

1-ok, я заметил, что MAPIUtils устарел, но поскольку это уже beign, используемое в проекте Im работает, я didnt change.it. Когда я попытался изменить его и использовать поля настроек safemailitem, а затем вызвать Save для mailitem, он не сохранил изменения. Я читал здесь, что в этих случаях вам нужно обмануть мировоззрение, подумав, что почта изменилась. т.е. mailitem.subject = mailitem.subject. Но, делая это, у меня есть почтовый ящик, дублированный некоторыми почтовыми серверами, а также некоторые IMAP-синхронные странные поведения. –

+0

2- Что касается параметра сохранения, я думаю, что вы имели в виду 4-й, я хотел, чтобы почта была сохранена, когда свойство добавлено/отредактировано. –

+0

3- \t Outlook._Explorer oExplorer = OutlookApp.ActiveExplorer(); \t Outlook.Selection Selection = oExplorer.Selection как Outlook.Selection; \t Этот выбор является mailItem, но это не должно быть проблемой здесь, так как у меня такая же проблема, даже если я получаю mailItem с помощью entryId из сеанса Outlook –