Программно контролировать Exchange Inbox и печатать этикетки - PullRequest
3 голосов
/ 07 февраля 2011

Вот что у меня есть ...

У меня есть программа, которая отслеживает метки типа штрих-кода. Я могу выбрать элемент в базе данных и распечатать этикетку для него. Я добавляю возможность отправлять электронную почту в определенную папку входящих сообщений на нашем сервере 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)
  {
  }
}

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

Пол

1 Ответ

2 голосов
/ 07 февраля 2011

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

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

...