Удаление входящих писем в MS Exchange на примере C #

Целью одного из наших проектов был обработчик MS Exchange для обработки входящих сообщений электронной почты.

Основным источником знаний была статья Логу Кришнана «Разработка управляемых приемников / ловушек для Exchange Server Store с использованием C #», опубликованная на [http://www.codeproject.com/csharp/CsManagedEventSinksHooks.asp]а также примеры из Microsoft Exchange SDK.

Мы использовали синхронные события и создали обработчик, который запускается при событии OnSyncSave. Оператор создает запись активности в Microsoft CRM, а затем удаляет сообщение из базы данных Exchange перед фиксацией:

public void OnSyncSave (IExStoreEventInfo pEventInfo, string bstrURLItem, int IFlags) {

пытаться {

if (IFlags == ((int) EVT_SINK_FLAGS.EVT_SYNC_COMMITTED + (int) EVT_SINK_FLAGS.EVT_IS_DELIVERED)) {

ProcessMessage (pEventInfo, bstrURLItem, IFlags);

}

}

catch (Exception ex) {

log.Debug (например, Message + » n» + ex.StackTrace);

}

В заключение {

LogManager.Shutdown ();

}

}

При отладке обработчиков Exchange чрезвычайно удобно использовать log4net в RollingLogFileAppender или RemoteAppender (для нескольких экземпляров объектов COM +). Вы можете прочитать об этом здесь http://logging.apache.org/log4net/

Чтобы включить обработку входящей почты, необходимо предоставить пользователю соответствующие разрешения, с какой учетной записи приложение COM + запускает обработчик. Это права на изменение информации в почтовых ящиках пользователей, для которых они зарегистрированы (Windows 2003 Server: Active Directory Users and Computer -> Users -> Properties (для учетной записи приложения COM +) -> Exchange Advanced -> Mailbox rights) . А теперь код:

private void DeleteMessage (строка bstrURLItem) {

пытаться {

ADODB.Connection oCn = новый ADODB.Connection ();

oCn.Provider = «exoledb.datasource»;

oCn.Open (bstrURLItem, «», «», -1);

if (oCn.State == 1) {

log.Debug («Хорошее соединение»);

}

else {

log.Debug («Плохое соединение»);

}

ADODB.Record rec = новый ADODB.Record ();

rec.Open (bstrURLItem, oCn,

ADODB.ConnectModeEnum.adModeReadWrite,

ADODB.RecordCreateOptionsEnum.adFailIfNotExists,

ADODB.RecordOpenOptionsEnum.adOpenSource,

«», «»);

rec.DeleteRecord (bstrURLItem, ложь);

rec.Close ();

oCn.Close ();

rec = null;

oCn = ноль;

}

catch (Exception ex) {

log.Debug (например, Message + » n» + ex.StackTrace);

}

}

Удачной настройки!

Борис Макушкин

Поделиться ссылкой:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Похожие записи

Почему профилирование данных важноПочему профилирование данных важно

Профилирование данных — важная задача в любой форме бизнес-списка, будь то новая база данных или расширение старой. Это ключевой шаг в анализе вашего списка контактов. Лучшее время для выполнения этой

Поставщик товаров для ресторанов поможет обеспечить бесперебойную работу вашего продовольственного бизнеса.Поставщик товаров для ресторанов поможет обеспечить бесперебойную работу вашего продовольственного бизнеса.

Компании, работающие в сфере общественного питания, полагаются на магазины товаров для ресторанов, которые помогают им работать без сбоев. Хорошая еда и хорошее обслуживание являются обязательными, но в хорошем заведении есть

Причины, по которым шаблоны бизнес-документов полезныПричины, по которым шаблоны бизнес-документов полезны

Бывает много ситуаций, когда мы сталкиваемся с необходимостью заполнить и подать документы в различные организации. Наверное, нет людей, которые не делали этого хотя бы раз в жизни. Однако ситуации различаются,