如何在尝试获取用户信息时绕过Outlook警报?

问题描述:

我想从Outlook中获取用户名,用户电子邮件,用户部门和用户位置以填充Excel用户表单。如何在尝试获取用户信息时绕过Outlook警报?

该代码没有问题。我遇到的问题是这样的:我从Excel的弹出窗口中看到“程序试图访问存储在Outlook中的电子邮件地址信息,如果这是意外的,请单击拒绝并确认您的防病毒软件是最新的。”

我发现一些代码是应该压制这个弹出窗口,但它似乎没有工作。以下是使用该过程调用的过程。我已经多次打电话给“Turn_Auto_Yes_On”程序以查看它是否适用于任何呼叫。 Turn_Auto_yes_On被成功执行,但似乎没有效果,因为我仍然在执行后得到Outlook消息。

我被困在这里,并去了多个网站的答案,我没有找到。任何帮助将非常感激。

Function fill_Outlook_Info() As Boolean 


Application.DisplayAlerts = False 
    Call Turn_Auto_Yes_On 
    Set OL = CreateObject("outlook.application") 

    Call Turn_Auto_Yes_On 
    Set olAllUsers = OL.Session.AddressLists.Item("All Users").AddressEntries 

    Call Turn_Auto_Yes_On 
    s_OutlookUser = OL.Session.CurrentUser.Name 

    Call Turn_Auto_Yes_On 
    Set oentry = olAllUsers.Item(s_OutlookUser) 

    Call Turn_Auto_Yes_On 
    Set oExchUser = oentry.GetExchangeUser() 
    v_department = oExchUser.DEPARTMENT 
    v_Email = oExchUser.PrimarySmtpAddress 
    s_OutlookCity = oExchUser.city 
End Function 

,这是应该绕过Outlook的警报

Option Explicit 

'these declarations are to access the RegisterWindowsMessage which is used to send "yes" to outlook 

Public OL, olAllUsers, oExchUser, oentry As Object 
Public v_Email As Variant 'v_department 
'Public s_OutlookUser As String 
Public Declare Function RegisterWindowMessage Lib "User32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long 
Public Declare Function FindWindow Lib "User32" _ 
Alias "FindWindowA" (ByVal lpClassName As Any, _ 
ByVal lpWindowName As Any) As Long 
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, _ 
ByVal wMsg As Long, ByVal wParam As Long, _ 
lParam As Any) As Long 



Public Sub Turn_Auto_Yes_On() 

Dim wnd As Long 
Dim uClickYes As Long 
Dim Res As Long 
    uClickYes = RegisterWindowMessage("CLICKYES_SUSPEND_RESUME") 
    wnd = FindWindow("EXCLICKYES_WND", 0&) 
    Res = SendMessage(wnd, uClickYes, 1, 0) 
End Sub 

Public Sub Turn_Off_Auto_Yes() 
Dim wnd As Long 
Dim uClickYes As Long 
Dim Res As Long 
    uClickYes = RegisterWindowMessage("CLICKYES_SUSPEND_RESUME") 
    wnd = FindWindow("EXCLICKYES_WND", 0&) 
    Res = SendMessage(wnd, uClickYes, 0, 0) 
End Sub 
+2

也许代码最终的作品,也许不是。但有一点是肯定的:这是一个解决方法,而且是一个解决方案。当你调用代码时,它会为你点击“确认”/“是”按钮,所以我想你必须在每次Outlook打开安全提示时调用例程,更好的解决方案是使用例如vbMAPI或Redemption,这正好解决了这个问题 –

+0

我猜这是在宏安全设置中,请查看[MS Docs](https://support.office.com/zh-cn/)中的“查看Trust Center中的安全设置”部分。 -us /条/ I-得到的警告 - 约-A-程序访问的电子邮件地址信息 - 或 - 发送的电子邮件上,我-代表-df007135-c632-4ae4-8577-dd4ba26750a2 ) –

+0

@CarlColjin是的,它非常快乐,我知道它,我会研究vbMAPI或redemption,谢谢你的建议。 –

虽然没有具体到这个确切的使用情况下,我已经得到了各地类似的展望“手动确认”和“Outlook安全”的代码问题通过使用Outlook Redemption

Outlook Redemption可以解决由Outlook安全补丁程序施加的限制,并提供许多对象和函数以处理未通过Outlook对象模型公开的属性和功能。

有了Outlook Redemption,你可以让你的代码不受安全补丁的影响。

我的特殊用例是自动从python发送outlook电子邮件。我对用户弹出窗口有同样的问题,这就是诀窍。