0

私のVB.NETアプリケーションは、Outlookと連携して次のことを実行するように設計されています。

  1. 10秒ごとに新しい未読メールをチェックします(タイマー)、
  2. 各フィールド(To、From、Date、Subject、Bodyなど)からデータをキャプチャし、SQLテーブル内に保存します。
  3. 受信トレイからメールを削除します。

このアプリケーションは、ワークステーションがスクリーンセーバーのタイムアウトからロックされるまで、問題なく動作します。PCのロックが解除されると、通常の操作が再開され、電子メールのバックログが処理されます。スクリーンセーバーを無効にするだけだと言うかもしれませんが、このPCには、共有ユーザーアカウントを使用するMicrosoftリモートデスクトップ接続からのみアクセスできるため、これは不可能です。

これは、Windows XPSP3およびOutlook2003で実行されます。私の問題は、実際には解決策を見つけることではなく、原因を見つけることだけです。しかし、明らかに解決策があればいいのですが。

これがアプリケーションのコードスニペットです。これは基本的なMicrosoft.Office.Interop.OutlookVB.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
4

1 に答える 1

2

Outlook Redemption (http://www.dimastr.com/redemption/home.htm) をチェックするほど強くはお勧めできません。これにより、Outlook をいじる必要なく、Exchange を操作できるようになります。あなたがしようとしていることを本質的に行うアプリケーションがいくつかあります。それらのいくつかはサービスとして実行され、他のものは時間指定されたジョブで呼び出されるか、対話的に実行されますが、ユーザーがログインしているかどうかに関係なく問題が発生するものはありません.

于 2012-07-02T14:23:40.123 に答える