电子邮件进入收件箱后触发 Outlook 脚本
Trigger an Outlook script after the email has entered the inbox
我正在尝试完成我的访问系统和 Outlook 之间的集成。
该系统的基础是当一封电子邮件进入特定的收件箱时,Outlook 需要触发一个脚本。该脚本然后打开 Access 数据库并运行它自己的功能来浏览收件箱,获取电子邮件中的附件并将其导入数据库。
目前这两个脚本 "Work" 就 Outlook 调用 Access 和 Access 做这件事而言。问题是当 Outlook 执行脚本时,它是在邮件实际进入邮箱之前。访问应用程序将启动,将收件箱扫描为空,并在邮件实际进入收件箱之前关闭。
我尝试在脚本中添加一个 "Pause" 循环,尝试让它等到电子邮件可读后再打开访问应用程序,但这只是在 [= 期间冻结了 outlook 27=] 而不是让电子邮件变得可读。
这是我在 Outlook 中的脚本:
Sub ExecuteDealRequest(item As Outlook.MailItem)
Dim currenttime As Date
currenttime = Now
Do Until currenttime + TimeValue("00:00:30") <= Now
Loop
Dim AccessApp As Access.Application
Set AccessApp = CreateObject("Access.Application")
AccessApp.OpenCurrentDatabase ("C:\commHU\Comm HU Request.accdb"), False
AccessApp.Visible = True
AccessApp.DoCmd.RunMacro "Macro1"
Set AccessApp = Nothing
End Sub
此时:我正在使用 outlook 规则启动脚本:
Apply this rule after the message arrives
With Pricing Request in the Subject
and on this computer only
Move it to the Pricing Requests folder
and run Project.ExecuteDealRequest
and stop processing more rules
任何帮助都会很棒,因为这是我需要开始工作的最后一块
你可以试试这样的方法,
添加此代码以等待新邮件
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
ThisOutlookSession.GetNamespace("MAPI").GetItemFromID(EntryIDCollection).Subject
' Check for the email subject / any property
'then call your method
End Sub
您不需要规则,按此方式尝试- ThisOutlookSession
中的代码
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olNs As Outlook.NameSpace
Dim Inbox As Outlook.MAPIFolder
Set olNs = Application.GetNamespace("MAPI")
Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
Set Items = Inbox.Items
End Sub
Private Sub Items_ItemAdd(ByVal Item As Object)
If TypeOf item Is Outlook.MailItem Then
ExecuteDealRequest Item
End If
End Sub
' ---- Your Code
Sub ExecuteDealRequest(Item As Outlook.MailItem)
Dim currenttime As Date
Dim AccessApp As Access.Application
Set AccessApp = CreateObject("Access.Application")
AccessApp.OpenCurrentDatabase ("C:\commHU\Comm HU Request.accdb"), False
AccessApp.Visible = True
AccessApp.DoCmd.RunMacro "Macro1"
Set AccessApp = Nothing
End Sub
我正在尝试完成我的访问系统和 Outlook 之间的集成。
该系统的基础是当一封电子邮件进入特定的收件箱时,Outlook 需要触发一个脚本。该脚本然后打开 Access 数据库并运行它自己的功能来浏览收件箱,获取电子邮件中的附件并将其导入数据库。
目前这两个脚本 "Work" 就 Outlook 调用 Access 和 Access 做这件事而言。问题是当 Outlook 执行脚本时,它是在邮件实际进入邮箱之前。访问应用程序将启动,将收件箱扫描为空,并在邮件实际进入收件箱之前关闭。
我尝试在脚本中添加一个 "Pause" 循环,尝试让它等到电子邮件可读后再打开访问应用程序,但这只是在 [= 期间冻结了 outlook 27=] 而不是让电子邮件变得可读。
这是我在 Outlook 中的脚本:
Sub ExecuteDealRequest(item As Outlook.MailItem)
Dim currenttime As Date
currenttime = Now
Do Until currenttime + TimeValue("00:00:30") <= Now
Loop
Dim AccessApp As Access.Application
Set AccessApp = CreateObject("Access.Application")
AccessApp.OpenCurrentDatabase ("C:\commHU\Comm HU Request.accdb"), False
AccessApp.Visible = True
AccessApp.DoCmd.RunMacro "Macro1"
Set AccessApp = Nothing
End Sub
此时:我正在使用 outlook 规则启动脚本:
Apply this rule after the message arrives
With Pricing Request in the Subject
and on this computer only
Move it to the Pricing Requests folder
and run Project.ExecuteDealRequest
and stop processing more rules
任何帮助都会很棒,因为这是我需要开始工作的最后一块
你可以试试这样的方法,
添加此代码以等待新邮件
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
ThisOutlookSession.GetNamespace("MAPI").GetItemFromID(EntryIDCollection).Subject
' Check for the email subject / any property
'then call your method
End Sub
您不需要规则,按此方式尝试- ThisOutlookSession
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olNs As Outlook.NameSpace
Dim Inbox As Outlook.MAPIFolder
Set olNs = Application.GetNamespace("MAPI")
Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
Set Items = Inbox.Items
End Sub
Private Sub Items_ItemAdd(ByVal Item As Object)
If TypeOf item Is Outlook.MailItem Then
ExecuteDealRequest Item
End If
End Sub
' ---- Your Code
Sub ExecuteDealRequest(Item As Outlook.MailItem)
Dim currenttime As Date
Dim AccessApp As Access.Application
Set AccessApp = CreateObject("Access.Application")
AccessApp.OpenCurrentDatabase ("C:\commHU\Comm HU Request.accdb"), False
AccessApp.Visible = True
AccessApp.DoCmd.RunMacro "Macro1"
Set AccessApp = Nothing
End Sub