|
代码如下,进入outlook后,按alt+f11,在ThisOutlookSession里面贴入如下代码,记得把outlook的宏安全性调整为“低”哦。
win7 ultimate + outlook2010通过,理论上outlook2007也可以,但2003不确定,希望大家多测试。做了有限次的测试,也不能保证没有bug,大家多提意见。
实现功能:
1、按发送后,如果正文或标题里包含“attach”、“附件”,但邮件却没有附件,将弹出提示窗口。支持检测多个关键词,自己修改代码。
2、可以延时发送邮件,延时时间以秒计算。(outlook的规则里面的延时时间最低为1分钟),如果不需要该功能,可在代码里关闭。可以设定重要性为高的邮件是否也延时发送。
延时发送有两种实现方式,可以都尝试一下,建议不了解vba的兄弟还是采用第一种延时发送的方法。:
a、(默认的方式)点击发送后,弹出一个对话框,如果点击ok就马上发送,如果点击cancel就不发送,如果什么都不动,那么10秒钟后自动发送(可自行设置时间)。
b、点击发送后,邮件保存在发件箱里,10秒钟后自动发送。该方法采用mailItem.DeferredDeliverTime属性,但由于本人vba技术有限,因此,如果采用这一方法,延时发送的时间很难控制在10秒,请高手解决。
该vba的原文来自网上,感谢原作者,为了阅读方便,我删掉了原作者的注释信息,请原谅。
- Private Declare Function MsgBoxEx Lib "user32" Alias "MessageBoxTimeoutA" ( _
- ByVal hwnd As Long, _
- ByVal lpText As String, _
- ByVal lpCaption As String, _
- ByVal wType As VbMsgBoxStyle, _
- ByVal wlange As Long, _
- ByVal dwTimeout As Long) As Long
- Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
- If TypeName(Item) <> "MailItem" Then Exit Sub
- 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 ' loop var for FOR-NEXT-loop
- Dim intDeferStyle As Integer
- Dim intDeferTime As Integer
- Dim intMailImportance As Integer
- Dim bDeferImportance As Boolean
- bFoundSearchstring = False
- intMailImportance = Item.Importance
- '设定附件提醒的相关参数
- sSearchStrings(0) = "attach" '正文或标题包含的关键字,当找到这些关键字时,就认定邮件应该带附件
- sSearchStrings(1) = "enclose" '可以设定多个关键字,但记得在“Dim sSearchStrings(2) As String”语句中更改数组上限
- sSearchStrings(2) = "附件"
- '延时发送相关参数,可以更改
- intDeferStyle = 1 '延时发送的模式,0=不延时发送,1=跳出倒计时对话框,2=采用outlook自带的延时发送属性DeferredDeliveryTime
- intDeferTime = 10 '延时发送的时间,单位秒
- bDeferImportance = False '重要性为高的邮件是否也延时发送,0=重要性高的邮件不延时,1=重要性高的邮件也延时
- If bDeferImportance Then
- intMailImportance = 1
- End If
- '检查附件
- 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 = "Attachment Checker:" & Chr(13) & Chr(10) & "邮件内容提到了附件,但没有找到任何附件!" & Chr(13) & Chr(10) & "确定不添加附件吗?"
- intRes = MsgBox(strMsg, vbYesNo + vbDefaultButton2 + vbExclamation, "You forgot the attachment!")
- If intRes = vbNo Then
- ' cancel send
- Cancel = True
- End If
- End If
- End If
- '延时发送
- If intDeferStyle = 1 And intMailImportance <> 2 Then
- '弹出倒计时对话框的方式,实现延时发送
- strMsg = intDeferTime & "秒后发送邮件" & Chr(13) & Chr(10) & "马上发送请点确定,后悔请点取消,否则耐心等待"
- intRes = MsgBoxEx(0, strMsg, "延时发送邮件", vbYesNo + vbInformation, 1, intDeferTime * 1000)
- If intRes = vbNo Then
- Cancel = True
- End If
- ElseIf intDeferStyle = 2 And intMailImportance <> 2 Then
- '采用outlook自带的DeferredDeliveryTime属性实现延时发送,有些小问题,很难控制10秒后准确发送,请高手解决,菜鸟可以用第一种延时发送方式
- Item.DeferredDeliveryTime = DateAdd("s", intDeferTime, Now)
-
- End If
- End Sub
复制代码
|
评分
-
1
查看全部评分
-
|