' VB Outlook Code - v0.1
' Forces removal of HTML
' Removes multiple exclamation points
' Analyzes subject line for upper-case chars
'
' I hacked up this code in response to people that send me HTML
' email in all CAPS with 20 "!" in the subject... I'm sure you
' can find better uses for it ;-)
'
' Code originally taken from:
' OstroSoft [http://www.ostrosoft.com/vb/disable_html_email.asp]
' (Thanks a million Ostro-guys)
'
' Hacked up by: Scott Hurring [scott at hurring dot com]
' http://hurring.com/code/vb/outlook/
'
'
Public WithEvents oItem As MailItem
Public WithEvents oInspector As Inspector
Public WithEvents oInspectors As Inspectors
Public WithEvents oControl As CommandBarButton
' Handle new mail here
Private Sub Application_NewMail()
On Error Resume Next
Set oFolder = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
For Each oNewItem In oFolder.Items.Restrict("[Unread] = 0")
oItem = oNewItem
Call KillMultipleExPoints
Call KillEvilUpperCase
Call ThrashSPAM
Call StripHTMLBody
oItem.Save
Next
End Sub
' Open mail view window (Inspector window)
Private Sub oInspector_Activate()
' If it's not an email message, stop
If oItem Is Nothing Then Exit Sub
Call KillMultipleExPoints
Call KillEvilUpperCase
Call ThrashSPAM
Call StripHTMLBody
oItem.Save
' Put Show HTML button to menu bar
If InStr(oItem.Body, "/***** HTML *****/" & vbCrLf) > 0 Then
Set oControl = oInspector.CommandBars("Menu Bar").FindControl(, , "Show HTML")
If oControl Is Nothing Then
Set oControl = oInspector.CommandBars("Menu Bar").Controls.Add
oControl.Tag = "Show HTML"
oControl.Caption = "Show HTML"
End If
oControl.Visible = True
End If
End Sub
' Remove multiple exclamation points, etc...
Private Sub KillMultipleExPoints()
' Remove ALL exclamation points
oItem.Subject = Replace(oItem.Subject, "!!", "")
oItem.Body = Replace(oItem.Body, "!!", "")
End Sub
' Count up all upper-case chars, if they exceed
' a certain percentage, set it all to lowercase
Private Sub KillEvilUpperCase()
'MsgBox "KillEvilUpperCase"
Dim i As Long
Dim UCount As Variant
Dim Percent As Variant
UCount = CDec("0.0")
Percent = CDec("0.5") ' Percent / 100; 0.5 = 50%
If Len(oItem.Subject) > 0 Then
For i = 1 To Len(oItem.Subject)
Code = Asc(Mid(oItem.Subject, i, 1))
If Code >= 65 And Code <= 90 Then
UCount = UCount + 1
End If
Next
' If more than % chars are upper-case, convert all to lower
If ((UCount / Len(oItem.Subject)) > Percent) Then
oItem.Subject = LCase(oItem.Subject)
End If
End If
End Sub
' Take the HTMLBody and comment it out and move it to the bottom
Private Sub StripHTMLBody()
'MsgBox "Strip HTML Body"
Body = oItem.Body
Html = oItem.HTMLBody
' If there's an HTMLBody, convert it to plain-text
If Trim(Html) <> "" Then
Body = Body & vbCrLf & vbCrLf & "/***** HTML *****/" & vbCrLf & _
Html & vbCrLf & "/***** End HTML *****/"
End If
oItem.HTMLBody = ""
oItem.Body = Body
'oItem.Save
End Sub
' How to handle messages in category "SPAM"
Private Sub ThrashSPAM()
If InStr(oItem.Categories, "SPAM") Then
'MsgBox "Category SPAM"
oItem.Body = LCase(oItem.Body)
oItem.Subject = LCase(oItem.Subject)
End If
End Sub
' Convert email message back to HTML format
Private Sub oControl_Click(ByVal Ctrl As Office.CommandBarButton,
CancelDefault As Boolean)
Dim sBody As String
Dim sHTML As String
Dim nStart As Long
Dim nEnd As Long
Set oItem = oInspector.CurrentItem
sBody = oItem.Body
nStart = InStr(sBody, "/***** HTML *****/" & vbCrLf)
If nStart > 0 Then
sHTML = Mid(sBody, nStart + 18)
nEnd = InStr(sHTML, vbCrLf & "/***** End HTML *****/")
If nEnd > 1 Then
sHTML = Left(sHTML, nEnd - 1)
If nStart > 1 Then sBody = Left(sBody, nStart - 1) Else sBody = ""
oItem.Body = sBody
oItem.HTMLBody = sHTML
If Left(oItem.Subject, 4) = "(*) " Then
oItem.Subject = Mid(oItem.Subject, 5)
End If
oControl.Visible = False
End If
End If
End Sub
' Track Inspectors
' (Inspector is a child window, displaying an Outlook item: email, task, note, etc.)
Private Sub Application_Startup()
Set oInspectors = Application.Inspectors
End Sub
' If Outlook item is opened get its Inspector
Private Sub oInspectors_NewInspector(ByVal Inspector As Inspector)
Set oInspector = Inspector
On Error Resume Next
' If Item is not email message - error happens
Set oItem = oInspector.CurrentItem
End Sub
' Close Inspector window
Private Sub oInspector_Deactivate()
On Error Resume Next
oControl.Delete
End Sub