2011-02-07 5 views
3

Вот что у меня есть ...Программно отслеживать Exchange Inbox и печатать ярлык

У меня есть программа, которая отслеживает метки типа штрих-кода. Я могу выбрать элемент в базе данных и напечатать ярлык для него. Я добавляю возможность отправлять электронную почту на конкретный почтовый ящик на нашем сервере Exchange (2007 SP1) с идентификатором элемента в строке темы, а затем печатать ярлык с этим идентификатором. Пока я могу читать из Exchange и извлекать идентификационный номер, а затем отправить его в отчет и распечатать отчет. Где я застрял, отслеживает входящие. Как автоматически запустить метод readEmail()? Нет никакого события, чтобы это произошло. Я должен сам проверить его. Идея заключается в том, что если нам нужно напечатать ярлык, мы можем просто отправить электронное письмо на этот почтовый ящик, и метка будет печататься автоматически. Только один человек может их распечатать, и если его здесь нет, а кому-то нужен ярлык, это позволит ему отправить электронное письмо и напечатать ярлык.

private void readEmail() 
{ 
    ExchangeService _mailService = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
    _mailService.UseDefaultCredentials = true; 
    _mailService.Url = new Uri("https://webmail.mydomain.com/ews/exchange.asmx"); 

    try 
    { 
    ItemView allItems = new ItemView(100); 
    SearchFilter searchFilterInbox = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false); 
    Folder _inbox = Folder.Bind(_mailService, WellKnownFolderName.Inbox); 

    if (_inbox.UnreadCount > 0) 
    { 
     FindItemsResults<Item> findResults = _inbox.FindItems(searchFilterInbox, allItems); 
     List<Item> resultItems = new List<Item>(); 
     foreach (Item item in findResults.Items) 
     { 
     resultItems.Add(item); 
     _mailService.LoadPropertiesForItems(resultItems, PropertySet.FirstClassProperties); 
     cboPropertyTag.Text = item.Subject; 
     GetReportVariables(); 
     reportType = "autoPrint"; 
     reportViewer rv = new reportViewer(); 
     rv.Show(); 
     item.Move(WellKnownFolderName.DeletedItems); 
     } 
    } 
    } 
    catch (ServiceVersionException) 
    { 
    } 
} 

Заранее благодарен!

Пол

ответ

2

Первая мысль, которая приходит на ум, это System.Timers.Timer, который регулярно выполняет readEmail().

Другой вариант - просто использовать запланированную задачу для exe, которая запускается каждые x минут и выполняет ваш метод.

+1

Спасибо. Я добавил объект монитора, установил его на 30 секунд (будет делать это дольше, когда мы запустим), запустил его, сказал, когда он пропустил, запустил метод, как указано выше. Я остановил таймер в начале и сбросил, а затем начал его в конце. Проблема возникает, когда я обращаюсь к объекту в форме, я получаю ошибку поперечного потока. Поэтому я выясню, как получить данные для этого, а не полагаться на форму. –