2011-02-07 3 views
3

다음은 내가 가지고있는 것입니다 ...프로그래밍 방식으로 Exchange받은 편지함 및 인쇄 레이블을 모니터링하십시오.

바코드 형식 레이블을 추적하는 프로그램이 있습니다. 데이터베이스에서 항목을 선택하고 레이블을 인쇄 할 수 있습니다. 제목 줄에 항목 ID가있는 Exchange 서버 (2007 SP1)의 특정받은 편지함으로 전자 메일을 보내고 그 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) 
    { 
    } 
} 

미리 감사드립니다. 마음에 오는

답변

2

첫 번째 아이디어는 정기적으로 readEmail()을 실행하는 System.Timers.Timer이다.

다른 옵션은 x 분마다 실행되고 메서드를 실행하는 exe에 대해 예약 된 작업을 사용하는 것입니다.

+1

감사합니다. 나는 모니터 객체를 추가하고, 30 초로 설정했다. (실행하면 길어질 것이다.) 시작했다. Elapsed라고 말하면 위와 같은 방법으로 실행했다. 나는 처음에 타이머를 멈추고 다시 리셋했다가 다시 시작했다. 문제는 이제 폼에있는 객체에 액세스 할 때 크로스 스레드 오류가 발생합니다. 그래서 양식에 의존하는 대신 데이터를 가져 오는 방법을 알아 내야합니다. –