阅读 ASP.NET 中的 Outlook 消息捕获越界错误

Posted

技术标签:

【中文标题】阅读 ASP.NET 中的 Outlook 消息捕获越界错误【英文标题】:Read Outlook messages in ASP.NET catches out of bounds error 【发布时间】:2013-11-15 20:06:33 【问题描述】:

我正在尝试将 MS Outlook 集成到 asp.net 中。我的代码(如下)捕获越界错误。我究竟做错了什么?我没有正确收到收件箱消息吗?在此先感谢

编辑:基于我的调试inbox = name.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) 什么都不返回。我不知道为什么

 Dim ol As Outlook.Application = New Outlook.Application
        Dim name As Microsoft.Office.Interop.Outlook._NameSpace
        Dim inbox As Microsoft.Office.Interop.Outlook.MAPIFolder
        Dim item As Microsoft.Office.Interop.Outlook.PostItem
        Dim subF As Microsoft.Office.Interop.Outlook.MAPIFolder

        Try
            name = ol.GetNamespace("MAPI")
            name.Logon(Nothing, Nothing, False, False)
            inbox = name.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox)
            subF = inbox.Folders(0)
            Dim ctr As Integer
            For ctr = 0 To subF.Items.Count
                item = subF.Items(ctr)
                Label1.Text += "Subject: " + item.Subject + "<br/>"
                Label1.Text += "Date: " + item.SentOn.ToLongDateString() + " " + item.SentOn.ToLongTimeString() + "<br/>"
                Label1.Text += "Category: " + item.Categories + "<br/>"
                Label1.Text += "Body: " + item.Body + "<br/>"
                Label1.Text += "htmlBody: " + item.HTMLBody + "<br/>"


            Next



        Catch ex As System.Runtime.InteropServices.COMException

        End Try

【问题讨论】:

【参考方案1】:

首先,Outlook 中的所有集合都是基于 1,而不是 0。

其次,Outlook 与任何其他 Office 应用程序一样,不能在服务中使用,例如 IIS。如果您需要代码在服务中运行,CDO 1.21(不再由 Outlook 安装)或Redemption 是您的选择。但请记住,代码将访问服务器上的 Outlook 数据,而不是客户端,这可能不是您想要的。

【讨论】:

【参考方案2】:

检查您的索引库

改变

For ctr = 0 To subF.Items.Count

For ctr = 1 To subF.Items.Count

或者可能

For ctr = 0 To subF.Items.Count - 1

...如果微软最终摆脱了 Outlook 对象的 base-1-indexing 方案。


确保确实有一个文件夹!

检查以确保收件箱包含子文件夹。如果没有,请使用收件箱本身。

inbox = name.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox)
If inbox.Folders.Count > 0 Then
    subf = inbox.Folders(1)
Else
    subf = inbox
End If

【讨论】:

inbox = name.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) 不知道为什么没有返回

以上是关于阅读 ASP.NET 中的 Outlook 消息捕获越界错误的主要内容,如果未能解决你的问题,请参考以下文章

已发送邮件不显示带有自定义 Outlook 消息表单的邮件跟踪

asp.net 身份中的用户名验证消息问题

如何更改Outlook邮件的发件人?

使用谷歌云消息在 Asp.net Webform 或 mvc 中推送通知

Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

Outlook 中的 VBA:“Microsoft Outlook 已停止工作”消息