为outlook添加邮件发送的确认提示框

发表于 2017-07-03   |   分类于 技术

在工作中,由于个人疏忽,经常会有发错邮件,或是邮件中遗漏附件等现象发生,为了预防这些问题,可以在发送邮件时利用相关的工具帮你自动检测出这些问题。
在网上搜了相关的问题,发现一段代码,但是代码里面有一些错误,导致无法正常使用,自己修改了一下:
主要实现了:
1、智能检测并提示附件遗漏
2、再次确认收件人
有需要的可以拿去用,不会用的请留言。
使用方法已添加。

源代码:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

    Dim objRecip As Recipient
    Dim objContact As ContactItem
    Dim cancel_Attach As Boolean
    Dim intRes As Integer
    Dim strMsg As String
    Dim strThismsg As String
    Dim intOldmsgstart As Integer
    Dim sSearchStrings(2) As String
    Dim bFoundSearchstring As Boolean
    Dim i As Integer

    bFoundSearchstring = False
    sSearchStrings(0) = "attach"
    sSearchStrings(1) = "enclose"
    sSearchStrings(2) = "附件"
    
    intOldmsgstart = InStr(Item.Body, "-----Original Message-----")
    If intOldmsgstart = 0 Then
        strThismsg = Item.Body + " " + Item.Subject
    Else
        strThismsg = Left(Item.Body, intOldmsgstart) + " " + Item.Subject
    End If
    
    For i = LBound(sSearchStrings) To UBound(sSearchStrings)
        If InStr(LCase(strThismsg), sSearchStrings(i)) > 0 Then
            bFoundSearchstring = True
            Exit For
        End If
    Next i
    
    If bFoundSearchstring Then
        If Item.Attachments.Count = 0 Then
        strMsg = "附件检测器:" & Chr(13) & Chr(10) & "此邮件中提及附件,是否遗漏添加附件?" & Chr(13) & Chr(10) & "是否发送?"
        intRes = MsgBox(strMsg, vbYesNo + vbDefaultButton2 + vbExclamation, "Microsoft Outlook")
            If intRes = vbNo Then
                cancel_Attach = True
            End If
        End If
    End If
    
    Dim strTo As String
    Dim strCC As String
    Dim strBCC As String
    
    strTo = ""
    strCC = ""
    strBCC = ""
    
    If cancel_Attach = True Then
        Cancel = True
        Exit Sub
    End If
    
    If Item.MessageClass Like "IPM.TaskRequest*" Then
        Set Item = Item.GetAssociatedTask(False)
    End If
    
    For Each objRecip In Item.Recipients
        If LCase(objRecip.Address) Like "/o=*" Then
            If objRecip.Type = olTo Then
                strTo = strTo + objRecip.Name
            ElseIf objRecip.Type = olCC Then
                strCC = strCC + objRecip.Name
            ElseIf objRecip.Type = olBCC Then
                strBCC = strBCC + objRecip.Name
            End If
        End If
    Next
    
    MSGText = "主题:「" & Item.Subject & "」" & _
    vbCr & " 收信 : " & strTo & vbCr & " 抄送 : " & strCC & vbCr & " 密送 : " & strBCC & _
    vbCr & vbCr & "是否发送?"
    If MsgBox(MSGText, vbYesNo, "Microsoft Outlook") = vbNo Then
        Cancel = True
    End If

End Sub

使用方法:

工具栏添加开发工具

进入选项-> 自定义工具栏,确保开发工具被选中
outlook_check1.png

添加代码

进入开发工具->Visual Basic,拷贝代码到文件
outlook_check2.png
outlook_check3.png

放开宏的启动权限

因为自己写的宏是没有数字证书的,所以需要调整宏的安全级别,不建议放到最低,使用提示即可。
outlook_check4.png

效果展示

outlook_check5.png
outlook_check6.png

已有 10 条评论


  1. jamie

    谢谢分享code,但是如何使用啊?
    可以麻烦写一下Stap嘛

    jamie July 17th, 2019 at 02:27 pm回复
    1. 志平

      已添加~

      志平 July 18th, 2019 at 09:36 am回复
  2. Header

    谢谢分享,试了之后发现有个问题:
    确认发送后,邮件内容会发送3次(不是outlook保存发送邮件副本的设置原因),收件人邮箱看了也确实收到3封邮件,请问代码是否要调整?

    Header November 10th, 2020 at 06:31 pm回复
    1. 志平

      上面的代码理论上不会导致发三次的问题,不清楚是啥原因,我这相同的代码没有问题

      志平 November 16th, 2020 at 08:02 pm回复
  3. dino

    感谢分享。
    请问使用时,出现弹窗
    编译错误:无效外部过程
    请问如何处理呢?
    谢谢。

    dino March 2nd, 2021 at 10:23 am回复
    1. 志平

      文章中代码展示区域有滚动条,是不是没拷贝全?

      志平 March 15th, 2021 at 09:23 am回复
  4. walter

    感谢分享。
    请问使用时,要是在针对邮件地址有区分内部联系人和外部联系人,只有在发送给外部联系人的时候,才有这个弹出提示框,该怎么修改呢?
    感谢楼主帮助

    walter April 21st, 2021 at 09:22 am回复
  5. roy

    我添加后,点击发送,有弹窗,只能看到主题。收件人以及超送人员都看不到 显示空白。

    roy December 19th, 2023 at 10:47 am回复
    1. leo

      我添加后,点击发送,有弹窗,只能看到主题。收件人以及超送人员都看不到 显示空白。

      leo December 26th, 2023 at 09:50 am回复
  6. Tom

    我添加后,点击发送,有弹窗,只能看到主题。收件人以及超送人员都看不到 显示空白。请问哪里有问题

    Tom March 29th, 2024 at 03:56 pm回复

发表新评论

© 2017 Powered by Typecho
苏ICP备15035969号-3