VB.NET - Microsoft.Office.Interop.Outlook - 工作站锁定时不起作用?

Posted

技术标签:

【中文标题】VB.NET - Microsoft.Office.Interop.Outlook - 工作站锁定时不起作用?【英文标题】:VB.NET - Microsoft.Office.Interop.Outlook - doesn't work when workstation is locked? 【发布时间】:2012-07-02 22:43:40 【问题描述】:

我的VB.NET 应用程序旨在与 Outlook 一起工作以执行以下操作。

    每 10 秒检查一次新的未读电子邮件(计时器), 从每个字段(To、From、Date、Subject、Body 等)捕获数据并存储在 SQL 表中, 从收件箱中删除电子邮件。

此应用程序可以完美运行,直到工作站因屏幕保护程序超时而锁定自身。解锁 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

【问题讨论】:

我想这与工作站锁定时与交换服务器断开连接有关。您是否记录错误/异常?如果是这样,当工作站锁定时会发生什么?另外,检查 Windows 事件日志。 【参考方案1】:

我不能高度推荐您查看 Outlook Redemption (http://www.dimastr.com/redemption/home.htm)。这将允许您与 Exchange 进行交互,而不必与 Outlook 混为一谈。我有几个应用程序基本上可以完成您尝试做的事情;其中一些作为服务运行,另一些在定时作业上被调用或交互运行,但它们都没有任何关于用户是否登录的问题。

【讨论】:

您好,感谢您提供这条有用的建议。您能帮忙提供任何编码示例吗?

以上是关于VB.NET - Microsoft.Office.Interop.Outlook - 工作站锁定时不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

排序功能 Excel VB.Net

Microsoft 365 (Office 365) VS Microsoft Office

显示/交互/可见 ClosedXML Excel.XLWorkbook 不保存

缺少 Microsoft.Office.Core 参考

无法将“microsoft.Office.Interop.Excel.ApplicationClass”类型的 COM 对象转换为“microsoft.Office.Interop.Excel.App

怎样安装microsoft office