Обработка событий в Outlook
От: amigo421  
Дата: 22.12.04 16:45
Оценка:
Всем привет.
У меня такая задача. в MS Outlook 2003 при выборе мыла пользователем нужно просматривать кастомные свойства мыла, если оно (свойство) там обнаружиться то добавить в body этого мыла немного текста.
Теперь что я пишу:
Подключился к событию SelectionChanged у объекта Explorer'a
Соотв-но обработчик:
void __stdcall CAddin::OnSelChanged()
{
_ExplorerPtr spExpl;
MAPIFolderPtr spFld;
OlItemType itemType;
SelectionPtr slc;
long count;
_MailItemPtr mail;
BSTR senderEmail;

m_spApp->ActiveExplorer(&spExpl);
spExpl->get_CurrentFolder(&spFld);
spFld->get_DefaultItemType(&itemType);
if (itemType != olMailItem)
return;
spExpl->get_Selection(&slc);
slc->get_Count(&count);
for (long i=1; i<=count; i++) {
slc->Item(_variant_t(i), (IDispatch**)&mail);
mail->get_SenderEmailAddress(&senderEmail);
..........
}
}
на строчке mail->get_SenderEmailAddress(&senderEmail); происходит исключение.
здесь нет кода для его отлова поэтому Outlook после такого кода просто дальше работает.
соотв-но нужные мне действия
...................
не происходят.
на самом деле я так понимаю объект mail некорректно взялся. В принципе любой его метод приводит ошибке.
Подскажите плз кто знает в чем ошибка.
Кстати это не может быть связано как-то с секьюрностью? Имею ввиду когда Outlook спрашивает разрешаем или нет на X минут доступ для запросившего приложения? Кстати этот код почемуто не вызвал такого сообщения

Заранее спасибо.

22.12.04 20:44: Перенесено модератором из 'Работа — поиск и предложение' — Flamer
Re: Обработка событий в Outlook
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.12.04 06:08
Оценка:
Здравствуйте, amigo421, Вы писали:

A>    _MailItemPtr mail;
A>...
A>        slc->Item(_variant_t(i), (IDispatch**)&mail);
A>        mail->get_SenderEmailAddress(&senderEmail);

Вот этот кастинг и является источником ошибки. Все ж таки _MailItem — это не IDispatch! Правда же?!
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Обработка событий в Outlook
От: amigo421  
Дата: 23.12.04 07:57
Оценка:
Здравствуйте, Vi2, Вы писали:

Спасибо понятно, но не полностью. Коллекция Item'ов в Selection'е состоит из MailItem'ов.
Так как же правльно привести типы? Можно примерчик?

Заранее спасибо.

Vi2>Здравствуйте, amigo421, Вы писали:


Vi2>
A>>    _MailItemPtr mail;
A>>...
A>>        slc->Item(_variant_t(i), (IDispatch**)&mail);
A>>        mail->get_SenderEmailAddress(&senderEmail);
Vi2>

Vi2>Вот этот кастинг и является источником ошибки. Все ж таки _MailItem — это не IDispatch! Правда же?!
Re[2]: Обработка событий в Outlook
От: amigo421  
Дата: 23.12.04 09:30
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, amigo421, Вы писали:


Vi2>
A>>    _MailItemPtr mail;
A>>...
A>>        slc->Item(_variant_t(i), (IDispatch**)&mail);
A>>        mail->get_SenderEmailAddress(&senderEmail);
Vi2>

Vi2>Вот этот кастинг и является источником ошибки. Все ж таки _MailItem — это не IDispatch! Правда же?!

Похоже я был прав насчет секьюрити:
Все поля MailItem которые не требуют доступа к почтовой БД показываются нормально а остальные вызывают exception. Проверил с OutlookSpy.

Только вот непонятно почему у того же OutlookSpy доступ к этим полям вызывает диалог аутлука с вопросом на сколько минут даем доступ, а у меня никаких диалого только exception вываливается?
Как бы добраться до HTMLBody Sender'a? Может кто даст пример?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.