Программно контролировать 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)
{
}
}
Заранее спасибо!
Павел
1 ответ
Первая идея, которая приходит в голову, это System.Timers.Timer
который регулярно выполняет readEmail()
,
Другой вариант - просто использовать запланированное задание для исполняемого файла, который запускается каждые x минут и выполняет ваш метод.