在 Access 中创建 Outlook 收件箱电子邮件表

Posted

技术标签:

【中文标题】在 Access 中创建 Outlook 收件箱电子邮件表【英文标题】:Creating table of Outlook Inbox emails in Access 【发布时间】:2018-08-03 04:51:21 【问题描述】:

更新:

以下当前代码符合推荐的 SQL 构造:SqlString 中的错误 =

运行时错误“3011”:Microsoft Access 数据库引擎找不到对象“。确保对象存在并且正确拼写其名称和路径名。如果“不是本地对象,请检查您的网络连接或联系服务器管理员。

值得注意的是,我正在开发一个美国空军非机密网络系统,并通过 CAC 登录。

Sub InboxImport
    Dim SqlString As String
    Dim ConnectionString As String
    Dim EmailTableName As String
    Dim UserIdNum As String
    Dim EmailAddr As String
    Dim olNS As Outlook.NameSpace
    Dim olFol As Outlook.Folder`

    Set ol = CreateObject("Outlook.Application")
    Set olNS = ol.GetNamespace("MAPI")
    Set olFol = olNS.GetDefaultFolder(olFolderInbox)

    EmailTableName = "MyInbox" 'My table name
    UserIdNum = Environ("USERNAME")  '1277523A... acct #
    EmailAddr = olFol.Parent.name 'user's email address
    ConnectionString = "Outlook 9.0;MAPILEVEL=" & EmailAddr & "|;PROFILE=Default Outlook Profile;TABLETYPE=0;TABLENAME=MyInbox;COLSETVERSION=12.0;DATABASE=C:\Users\" & UserIdNum & "\AppData\Local\Temp\"

    SqlString = "SELECT [From] As [Sender], [Sender Name] As SenderName, [Subject Prefix] & [Normalized Subject] As Subject, [Contents] As [Body], [Received] As [ReceivedTime]" & _
                " INTO [Email]" & _
                " From [" & ConnectionString & "].[MyInbox]"
    DoCmd.RunSQL SqlString
end sub

原文:

我正在尝试将默认 Outlook 收件箱电子邮件提取到 Access 中的表格中。我可以使用向导成功检索电子邮件并填充各个列,并通过名为“收件箱”的 Access 表查看我当前的收件箱。

我的 Access 数据库将被多个员工同时使用,我不能要求他们为他们登录的每一台不同的计算机运行该向导。

我正在使用从页面中间复制的代码..."Export Outlook Emails to Access table - VBA"。

我正在尝试使用

DoCmd.RunSQL "INSERT INTO [Email] " & _
     "([Sender], [SenderName], [Subject], [Body], [ReceivedTime])" & _
     "VALUES " & _
     "'" & objProp(i).Sender & "', '" & _     'ERROR!
     objProp(i).SenderName & "', " & _  'ERROR!
     objProp(i).Subject & "', '" & _
     objProp(i).Body & "', '" & _       'ERROR!
     objProp(i).ReceivedTime & "';"

代码在查看除.ReceivedTime.Subject 之外的任何MailItem 属性时会出错,并且这些属性会引发错误...

运行时错误“287”:应用程序定义或对象定义错误

供我参考 - 数据库:

    Visual Basic 应用程序 Microsoft Access 15.0 对象库 OLE 自动化 Microsoft Office 15.0 Access 数据库引擎对象库 Microsoft Internet 控件 Microsoft Outlook 15.0 对象库

【问题讨论】:

我建议单步执行代码(使用 F8)并使用监视窗口和/或对象浏览器检查 objProp(i) 对象,以了解正在发生的事情。以下是 Chip Pearson 在 Debugging VBA 上提供的更多信息。 您确定 MyInboxforeign 表名,所以这就是在 Outlook 中调用文件夹的方式,没有空格? Email 是此处数据库中的表名。 @ErikvonAsmuth,有没有办法获取发件人的电子邮件地址? (或发件人的任何其他联系人属性?即电话号码、别名) 【参考方案1】:

我强烈建议您在从 Outlook 导入邮件时不要采取尝试过的方法。 Access 可以在 SQL 查询中本机处理 Outlook 数据文件。当然,您可以使用 VBA 执行这些查询。但它会更加优化。

诀窍是获取正确的连接字符串。您可以通过以下过程轻松获取连接字符串:

    在外部数据 -> 更多 -> Outlook 文件夹下创建所需 Outlook 文件夹的链接表,选择链接表,选择文件夹 Debug.Print CurrentDb.TableDefs!MyLinkedOutlookFolder.Connect获取连接字符串,Debug.Print CurrentDb.TableDefs!MyLinkedOutlookFolder.SourceTableName获取外部表名

    使用您获得的变量执行以下查询:

    SELECT [From] As [Sender], [Sender Name] As SenderName, [Subject Prefix] & [Normalized Subject] As Subject, [Contents] As [Body], [Received] As [ReceivedTime]
    INTO [Email]
    FROM [ThatConnectionString].[ThatSourceTableName]
    

示例连接字符串:

Outlook 9.0;MAPILEVEL=me@example.com|;PROFILE=Default Outlook Profile;TABLETYPE=0;TABLENAME=Inbox;COLSETVERSION=12.0;DATABASE=C:\Users\Me\AppData\Local\Temp\

示例源表名:

Inbox

这就是你所需要的,不需要复杂的 VBA。

【讨论】:

我需要在VB中选择特定的引用吗?我收到指向连接字符串太长/无效字符的错误:'运行时错误'3125':'9.0'不是有效名称。确保它不包含无效字符或标点符号,并且不要太长' 大部分代码共享是 SQL。只有那些 Debug.Print 语句应该在 VBA 中执行。你能准确地分享你正在做什么来得到这个错误吗? SqlString = "SELECT [From] As [Sender], [Sender Name] As SenderName, [Subject Prefix] & [Normalized Subject] As Subject, [Contents] As [Body], [Received] As [ReceivedTime]" & _ " INTO [Email]" & _ "From " & ConnectionString & ".MyInbox" DoCmd.RunSQL SqlString好像到了连接字符串,在字符串的'9.0'部分发现错误 这些括号是必需的。在字符串之前和之后添加它们。 好的 - 这让我有所了解,但我很难连接并得到 运行时错误“3011”:Microsoft access 数据库引擎找不到对象“。确保... 连接字符串 = `[Outlook 9.0;MAPILEVEL=first.last@us.af.mil|;PROFILE=Outlook;TABLETYPE=0;TABLENAME=Inbox;COLSETVERSION=12.0;DATABASE=C :\Users\127753~1\AppData\Local\Temp` 到目前为止,我感谢所有帮助!

以上是关于在 Access 中创建 Outlook 收件箱电子邮件表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Access VBA 从 Outlook 获取附件

outlook同一账户的情况下,怎样换台电脑能查看到以前的邮件

使用收件箱中的会议邀请

如何在 Lotus Notes 中创建一个按钮以查看收件箱中的最新电子邮件?

Excel VBA 连接 Outlook 以在根文件夹中创建文件夹

如何在PHP中创建Outlook日历会议请求?