3

这就是我所拥有的...

我有一个跟踪条形码类型标签的程序。我可以在数据库中选择一个项目并为其打印一个标签。我正在添加将电子邮件发送到我们的 Exchange 服务器 (2007 SP1) 上的特定收件箱的功能,主题行中包含项目 ID,然后打印带有该 ID 的标签。到目前为止,我可以从 Exchange 读取并提取 ID 号,然后将其发送到报告并让报告打印出来。我被困的地方是监控收件箱。如何让 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)
  {
  }
}

提前致谢!

保罗

4

1 回答 1

2

想到的第一个想法是System.Timers.Timer定期执行readEmail()

另一种选择是简单地将计划任务用于每 x 分钟运行一次并执行您的方法的 exe。

于 2011-02-07T20:40:48.310 回答