通过视觉基本错误加速Outlook



我正在尝试创建一个程序,该程序从Outlook的(2007年桌面版本)收件箱中检索所有电子邮件,并将其放入DataGridView中。

代码:

Imports Outlook = Microsoft.Office.Interop.Outlook
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim dt As DataTable
    Try
        Dim app As Outlook.Application = New Outlook.Application()
        Dim ns As Outlook.[NameSpace] = app.GetNamespace("MAPI")
        Dim inbox As Outlook.MAPIFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
        ns.SendAndReceive(True)
        dt = New DataTable("Inbox")
        dt.Columns.Add("Subject", GetType(String))
        dt.Columns.Add("Sender", GetType(String))
        dt.Columns.Add("Body", GetType(String))
        dt.Columns.Add("Date", GetType(String))
        DataGridView1.DataSource = dt
        For Each item As Object In inbox.Items
            If TypeOf item Is Outlook.MailItem Then
                Dim item1 As Outlook.MailItem = CType(item, Outlook.MailItem)
                dt.Rows.Add(New Object() {item1.Subject, item1.Sender, item1.HTMLBody, item1.SentOn.ToLongDateString() & "" + item1.SentOn.ToLongTimeString()})
            End If
        Next
        MessageBox.Show("done")
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    End Try
End Sub
End Class

当我尝试构建项目时,我会遇到关注错误:

system.runtime.interopservices.comexception(0x80040154):用CLSID检索COM类工厂的CLSID {0006F03A-0000-0000-0000-0000-C000-00000000000046}失败,导致以下错误:80040154类未注册(未注册(异常)(excepted frof Hresult:exception frof Hresult:0x80040154(regdb_e_classnotreg))

update

我已经将编译器CPU更改为x86和x64,这无法解决错误。

目标平台

您应用程序的目标平台是什么?它是基于x86的应用程序吗?

问题(可能是32位com dll)已注册的问题(可能),但是由于该应用程序以64位模式运行,因此找不到正确的注册(32位和64位com服务器分别注册)。

您还可以找到未注册的如何求解com异常类(Hresult的例外:0x80040154(regdb_e_classnotreg))?页面有帮助。

引起错误的问题是,两个应用程序(VS2015和MS Office 2007)都不在相同的权利下运行。打开具有相同权利(管理员或用户)的两个应用程序,并且该应用程序将起作用。感谢您的帮助!

尝试此方法并向其发送参数,例如主题,身体,蟾蜍,文件名...我确定这将有效..

Private Sub SendfromOutlook(sSubject As String, sBody As String, sTo As String, sFilename As String)
    Dim oApp As Interop.Outlook._Application
    oApp = New Interop.Outlook.Application
    Dim oMsg As Interop.Outlook._MailItem
    Dim strS As String()
    strS = sTo.Split(",")
    For i As Integer = 0 To strS.Length - 1
        oMsg = oApp.CreateItem(Interop.Outlook.OlItemType.olMailItem)
        oMsg.Subject = sSubject
        oMsg.Body = sBody
        oMsg.To = strS(i)
        Dim str As String = sFilename
        If sFilename <> "" Then

            Dim sBodyLen As Integer = Int(sBody.Length)
            Dim oAttachs As Interop.Outlook.Attachments = oMsg.Attachments
            Dim oAttach As Interop.Outlook.Attachment
            oAttach = oAttachs.Add(str, , sBodyLen)
        End If
        oMsg.Send()
    Next
    MessageBox.Show("EMail Sent Successfully!", "Information", MessageBoxButtons.OK)
    ClearAll()
End Sub

在这里我用来解决",一次发送多个邮件。 strs = sto.split(","))

最新更新