2012-07-02 2 views
0

VB.NET 응용 프로그램은 Outlook과 나란히 작동하여 다음을 수행하도록 설계되었습니다. 새로운 읽지 않은 이메일에 대한VB.NET - Microsoft.Office.Interop.Outlook - 워크 스테이션이 잠겨있을 때 작동하지 않습니까?

  1. 확인 각 필드에서 매 10 초 (타이머),
  2. 캡처 데이터 (에, 날짜, 제목, 본문 등에서), SQL 테이블 내에 저장
  3. 받은 편지함에서 이메일을 삭제하십시오.

이 응용 프로그램은 워크 스테이션이 화면 보호기 제한 시간에서 잠기는 순간까지 완벽하게 작동합니다. PC가 잠금 해제되면 정상 작동을 재개하고 전자 메일의 백 로그를 거칩니다. 화면 보호기를 사용하지 않도록 설정하겠다고 말할 것입니다.하지만이 PC는 공유 사용자 계정을 사용하는 Microsoft Remote Desktop Connection에서만 액세스 할 수 있으므로 불가능합니다.

이 문제는 Windows XP SP3 및 Outlook 2003에서 실행됩니다. 실제로 해결책을 찾는 것이 문제가 아니며 그 원인을 찾는 것이 더 있습니다. 하지만 분명히 좋은 해결책이 될 것입니다. 여기

는 응용 프로그램에서 코드의 조각, 그것은 기본 Microsoft.Office.Interop.Outlook의 VB.NET 코드입니다 :

Public Sub Outlook_GetMail() 

    Dim sFileName As String = "senderexcludedlist.txt" 
    Dim ssenderexcludedlist As String = "" 

    If System.IO.File.Exists(sFileName) = True Then 
     Dim objReader As New System.IO.StreamReader(sFileName) 

     Do While objReader.Peek() <> -1 
      ssenderexcludedlist = objReader.ReadLine() 
     Loop 

     objReader.Dispose() 
    End If 

    Dim sMessage As String = "" 

    ' Create Outlook application. 
    Dim oApp As Microsoft.Office.Interop.Outlook.Application = New Microsoft.Office.Interop.Outlook.Application 

    ' Get Mapi NameSpace. 
    Dim oNS As Microsoft.Office.Interop.Outlook.NameSpace = oApp.GetNamespace("mapi") 
    oNS.Logon("Mailbox", Missing.Value, False, True) 

    ' Get Messages collection of Inbox. 
    Dim oInbox As Microsoft.Office.Interop.Outlook.MAPIFolder = oNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox) 
    Dim oItems As Microsoft.Office.Interop.Outlook.Items = oInbox.Items 

    ' Get unread e-mail messages. 
    oItems = oItems.Restrict("[Unread] = true") 

    ' Loop each unread message. 
    Dim oMsg As Microsoft.Office.Interop.Outlook.MailItem 
    Dim i As Integer 

    For i = 1 To oItems.Count 
     On Error Resume Next 

     oMsg = oItems.Item(i) 
     Dim strBody = oMsg.Body() 
     strBody = Replace(strBody, vbNewLine, "<BR>") 
     strBody = Replace(strBody, "'", "´")   

     Dim strSenderEmailAddress As String = oMsg.SenderEmailAddress 

     If InStr(ssenderexcludedlist, strSenderEmailAddress) = 0 And Not oMsg.SenderName.Contains("Leeds Tech Support") Then 

      sMessage = sMessage & oMsg.Subject & vbNewLine 
      sMessage = sMessage & oMsg.SenderName & vbNewLine 
      sMessage = sMessage & strSenderEmailAddress & vbNewLine 
      sMessage = sMessage & oMsg.CC & vbNewLine 
      sMessage = sMessage & oMsg.ReceivedTime & vbNewLine 
      sMessage = sMessage & oMsg.Body & vbNewLine 
      sMessage = sMessage & "---------------------------" & vbNewLine & vbNewLine 
      MsgLog.Text = sMessage & MsgLog.Text 

      'INSERT SQL HERE 
     End If 
     oMsg.UnRead = False 
     oMsg.Delete() 
    Next 

    ' Log off. 
    oNS.Logoff() 

    ' Clean up. 
    oApp = Nothing 
    oNS = Nothing 
    oItems = Nothing 
    oMsg = Nothing 
End Sub 
+0

워크 스테이션이 잠길 때 Exchange 서버와의 연결을 끊는 것과 관련이 있다고 상상해보십시오. 오류/예외 기록 중입니까? 그렇다면 워크 스테이션이 잠길 때 어떻게됩니까? 또한 Windows 이벤트 로그를 확인하십시오. –

답변

2

난 당신이 전망 구속을 확인하는 것이 매우 충분히 추천 할 수 없습니다 (HTTP : //www.dimastr.com/redemption/home.htm). 이렇게하면 Outlook과 관련없이 Exchange와 상호 작용할 수 있습니다. 나는 당신이하려고하는 본질적으로 수행하는 몇 가지 응용 프로그램을 가지고 있습니다. 그들 중 일부는 서비스로 실행되고 다른 사용자는 시간 초과 작업에 호출되거나 대화식으로 실행되지만 사용자가 로그인했는지 여부에 아무런 문제가 없습니다.

+0

안녕하세요, 유용한 조언을 주셔서 감사합니다. 코딩 예제를 제공하는 데 도움을 줄 수 있습니까? – Andy

관련 문제