9

Outlook如果您要向外部域发送和发送电子邮件,如何发出警告?

每天发送大量电子邮件,总是有可能将一封错误地发送给错误的人。当他们是您公司以外的客户或人员时,这尤其是一个问题。

Alt + Enter通常是因为我没有彻底检查收件人,所以在为我输入电子邮件后快速发送电子邮件。

我发现了许多不太好的实现,所以我想我会在下面分享我的......

4

3 回答 3

13

感谢 ojhhawkins 提供上面的代码 - 非常有用。我做了一个简单的迭代,在 MsgBox 文本中包含一个外部电子邮件地址列表。

注意事项 - 我注意到当您在其他程序(例如 Excel、Adobe Reader 等)中使用“作为电子邮件附件发送”时不会出现警告。正如niton指出的那样:

回复:在其他程序中作为电子邮件附件发送。在此处的注释中有说明 outlookcode.com/d/code/setsavefolder.htm “...不适用于使用 File | Send 命令在 Office 程序或 Windows 资源管理器或其他程序中的类似命令创建的消息。这些命令调用简单 MAPI,它绕过 Outlook 功能。”

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim recips As Outlook.Recipients
    Dim recip As Outlook.Recipient
    Dim pa As Outlook.PropertyAccessor
    Dim prompt As String
    Dim strMsg As String

    Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

    Set recips = Item.Recipients
    For Each recip In recips
        Set pa = recip.PropertyAccessor
        If InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@example.com") = 0 Then
            strMsg = strMsg & "   " & pa.GetProperty(PR_SMTP_ADDRESS) & vbNewLine
        End If
    Next

    If strMsg <> "" Then
        prompt = "This email will be sent outside of example.com to:" & vbNewLine & strMsg & "Do you want to proceed?"
        If MsgBox(prompt, vbYesNo + vbExclamation + vbMsgBoxSetForeground, "Check Address") = vbNo Then
            Cancel = True
        End If
    End If
End Sub

要将此代码实际添加到您的 Outlook 应用程序中:

  • 如果您在功能区栏中看不到开发人员选项卡,请转到文件/选项,选择左侧的自定义功能区,然后勾选右侧的开发人员。
  • Developer选项卡中选择Visual Basic
  • 展开 Project1、Microsoft Outlook 对象,然后双击 ThisOutlookSession(左上角)。
  • 将上面的代码粘贴到模块中。
  • 将复制代码中的“example.com”替换为您的域。
  • 关闭 VBA 编辑器并保存对模块的更改。
  • Developer选项卡上单击Macro Security,然后将所有宏的级别更改为 Notifications或更低。
  • 重新启动 Outlook。(否则上面的代码不会初始化。)
于 2014-01-23T22:31:44.173 回答
2
  1. 将以下代码添加到OutlookApplication_ItemSend中的事件并将域更改为您自己的域

  2. 将其更改Macro Security为(所有宏的通知或启用所有宏

TO如果您的 1 个或多个,CCBCC地址不在您的域中(例如以下@mycompany.com.au) ,这将在发送前向您发出警告

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim recips As Outlook.Recipients
    Dim recip As Outlook.Recipient
    Dim pa As Outlook.PropertyAccessor
    Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
    Set recips = Item.Recipients
    For Each recip In recips
        Set pa = recip.PropertyAccessor
        If InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@mycompany.com.au") = 0 Then
            If MsgBox("Send mail to external domain?", vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then
                Cancel = True
                Exit Sub
            Else
                Exit Sub
            End If
        End If
    Next
End Sub
于 2013-07-20T00:22:44.747 回答
1

如果您不想使用 VBA,我发现了两个 Outlook 加载项,它们的作用相同,

于 2014-04-19T06:50:51.853 回答