sql - 通过带有 Access 的 SQL/VBA 查找 mailitem 的 Outlook 电子邮件地址
问题描述
当我将其传输到新表“MyInbox”时,使用 Access/VBA/SQL 从收件箱中获取各种电子邮件属性。
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"
UserIdNum = Environ("USERNAME") '1277523A...
EmailAddr = olFol.Parent.Name 'Gives your user 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], [Email] As [Email Addy], [Subject Prefix] & [Normalized Subject] As Subject, [Contents] As [Body], [Received] As [ReceivedTime]" & _
" INTO [MyInbox]" & _
" From [" & ConnectionString & "].[Inbox]"
DoCmd.SetWarnings False
DoCmd.RunSQL SqlString
DoCmd.SetWarnings True
End Sub
我正在尝试为收件箱中的每个电子邮件项目查找“发件人电子邮件”地址。在运行时,它当前会弹出一个“输入参数...”,其中 [Email] 的值为空白。
是否有一个很好的编译参考来查找所有这些不同类型的电子邮件 SQL 术语?
解决方案
循环浏览电子邮件项目。不幸的是,INSERT sql 在电子邮件正文中嵌入了特殊字符,显然与超链接有关。我认为弄清楚如何绕过它是不值得的。
Public Sub ImportEmails()
' Set up Outlook objects.
Dim ol As New Outlook.Application
Dim of As Outlook.MAPIFolder
Dim objItems As Outlook.Items
Dim mo As Outlook.MailItem, Atmt As Outlook.Attachment
'Set of = ol.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox).Folders("Repairs")
Set of = ol.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox)
Set objItems = of.Items
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("MyInbox")
For Each mo In objItems
'CurrentDb.Execute "INSERT INTO MyInbox SELECT '" & mo.SenderEmailAddress & "' AS Sender, '" & _
mo.SenderName & "' AS SenderName, '" & mo.Subject & "' AS Subject, '" & _
mo.body & "' AS Body, #" & mo.ReceivedTime & "# AS Received"
rst.AddNew
rst!EmailAdd = mo.SenderEmailAddress
rst!SenderName = mo.Sender
rst!Subject = mo.Subject
rst!body = mo.body
rst!Received = mo.ReceivedTime
rst.Update
'For Each Atmt In mo.Attachments
' Atmt.SaveAsFile "C:\path\" & Atmt.FileName
'Next
Next
End Sub
推荐阅读
- javascript - 在我的笑话测试中发出错误不会按预期触发错误处理程序
- transactions - 是否有事务开始时间戳 - 用于 txn 开始的 NOW() - 不是语句开始
- c++ - 为什么我在尝试使用 fin2.seekg(-2 * sizeof(int), ios::cur); 从头到尾读取文件时遇到一个奇怪的错误 ? 没有字符串
- node.js - 身份验证在招摇中工作正常,但在前端应用程序中响应为未经授权,尽管它将 jwt 令牌存储在 cookie 中
- azure - 如何在 Linux Azure App Service 上安装数据包
- list - 从多个数字列表中返回最高平均值的函数
- reactjs - 如何在 Victory (ReactJS) 中使用分组数据创建直方图?
- laravel - 从源“https://.....r.in”访问“https://......login”处的 XMLHttpRequest 已被 CORS 策略阻止
- css - vscode中的SvelteKit未使用的CSS选择器警告
- javascript - 重新定义和范围之间的相关性