Question : Programatically forward outlook e-mail using vba

I'd like to programatically forward Outlook e-mails, when I receive them, based on subject header and/or message body, to an external e-mail.  Can someone please post a working example below.  Basically I'd like to programatically simulate an outlook forward rule.  I'm using MS Outlook 2003 SP3.  Much appreciated.

Answer : Programatically forward outlook e-mail using vba

Okay below code bypasses outlook security warnings and programatically forwards e-malis to an external e-mail address.  The nice thing about this is you don't need to download any add-ins or use any external products.  To implement code, (1) set an outlook rule for incoming mail and (2) Install Microsoft Forms 2.0 Object Library within Outlook VBA.  Cheers!

Option Explicit
'Private DataObj As MSForms.DataObject

' Code: Send E-mail without Security Warnings
' OUTLOOK 2003 VBA CODE FOR 'ThisOutlookSession' MODULE
' (c) 2005 Wayne Phillips (http://www.everythingaccess.com)
' Written 07/05/2005
' Last updated v1.4 - 26/03/2008
'
' Please read the full tutorial here:
' http://www.everythingaccess.com/tutorials.asp?ID=Outlook-Send-E-mail-without-Security-Warning
'
' Please leave the copyright notices in place - Thank you.

Private Sub Application_Startup()

    'IGNORE - This forces the VBA project to open and be accessible using automation
    '         at any point after startup

End Sub

' FnSendMailSafe
' --------------
' Simply sends an e-mail using Outlook/Simple MAPI.
' Calling this function by Automation will prevent the warnings
' 'A program is trying to send a mesage on your behalf...'
' Also features optional HTML message body and attachments by file path.
'
' The To/CC/BCC/Attachments function parameters can contain multiple items by seperating
' them by a semicolon. (e.g. for the strTo parameter, '[email protected]; [email protected]' is
' acceptable for sending to multiple recipients.
'
Public Function FnSendMailSafe(strTO As String, _
                                strCC As String, _
                                strBCC As String, _
                                strSubject As String, _
                                strMessageBody As String, _
                                Optional strAttachments As String) As Boolean

' (c) 2005 Wayne Phillips - Written 07/05/2005
' Last updated 26/03/2008 - Bugfix for empty recipient strings
' http://www.everythingaccess.com
'
' You are free to use this code within your application(s)
' as long as the copyright notice and this message remains intact.

On Error GoTo ErrorHandler:

    Dim MAPISession As Outlook.NameSpace
    Dim MAPIFolder As Outlook.MAPIFolder
    Dim MAPIMailItem As Outlook.MailItem
    Dim oRecipient As Outlook.Recipient
   
    Dim TempArray() As String
    Dim varArrayItem As Variant
    Dim strEmailAddress As String
    Dim strAttachmentPath As String
   
    Dim blnSuccessful As Boolean

    'Get the MAPI NameSpace object
    Set MAPISession = Application.Session
   
    If Not MAPISession Is Nothing Then

      'Logon to the MAPI session
      MAPISession.Logon , , True, False

      'Create a pointer to the Outbox folder
      Set MAPIFolder = MAPISession.GetDefaultFolder(olFolderOutbox)
      If Not MAPIFolder Is Nothing Then

        'Create a new mail item in the "Outbox" folder
        Set MAPIMailItem = MAPIFolder.Items.Add(olMailItem)
        If Not MAPIMailItem Is Nothing Then
         
          With MAPIMailItem

            'Create the recipients TO
                TempArray = Split(strTO, ";")
                For Each varArrayItem In TempArray
               
                    strEmailAddress = Trim(varArrayItem)
                    If Len(strEmailAddress) > 0 Then
                        Set oRecipient = .Recipients.Add(strEmailAddress)
                        oRecipient.Type = olTo
                        Set oRecipient = Nothing
                    End If
               
                Next varArrayItem
           
            'Create the recipients CC
                TempArray = Split(strCC, ";")
                For Each varArrayItem In TempArray
               
                    strEmailAddress = Trim(varArrayItem)
                    If Len(strEmailAddress) > 0 Then
                        Set oRecipient = .Recipients.Add(strEmailAddress)
                        oRecipient.Type = olCC
                        Set oRecipient = Nothing
                    End If
               
                Next varArrayItem
           
            'Create the recipients BCC
                TempArray = Split(strBCC, ";")
                For Each varArrayItem In TempArray
               
                    strEmailAddress = Trim(varArrayItem)
                    If Len(strEmailAddress) > 0 Then
                        Set oRecipient = .Recipients.Add(strEmailAddress)
                        oRecipient.Type = olBCC
                        Set oRecipient = Nothing
                    End If
               
                Next varArrayItem
           
            'Set the message SUBJECT
                .subject = strSubject
           
            'Set the message BODY (HTML or plain text)
                If StrComp(Left(strMessageBody, 6), "", vbTextCompare) = 0 Then
                    .HTMLBody = strMessageBody
                Else
                    .Body = strMessageBody
                End If

            'Add any specified attachments
                TempArray = Split(strAttachments, ";")
                For Each varArrayItem In TempArray
               
                    strAttachmentPath = Trim(varArrayItem)
                    If Len(strAttachmentPath) > 0 Then
                        .Attachments.Add strAttachmentPath
                    End If
               
                Next varArrayItem

            .Send 'No return value since the message will remain in the outbox if it fails to send

            Set MAPIMailItem = Nothing
           
          End With

        End If

        Set MAPIFolder = Nothing
     
      End If

      MAPISession.Logoff
     
    End If
   
    'If we got to here, then we shall assume everything went ok.
    blnSuccessful = True
   
ExitRoutine:
    Set MAPISession = Nothing
    FnSendMailSafe = blnSuccessful
   
    Exit Function
   
ErrorHandler:
    MsgBox "An error has occured in the user defined Outlook VBA function FnSendMailSafe()" & vbCrLf & vbCrLf & _
            "Error Number: " & CStr(Err.Number) & vbCrLf & _
            "Error Description: " & Err.Description, vbApplicationModal + vbCritical
    Resume ExitRoutine

End Function

Sub subProcessInbound(mai As MailItem)
Dim strSubject As String
Dim strBody As String
Dim blnSuccessful As Boolean
Dim strTO As String
Dim strCC As String
Dim strBCC As String

    strTO = "[email protected]; [email protected]"
   'strCC = ""
    strBCC = ""

    strSubject = mai.subject
'        strBody = mai.Body
    mai.Display
    SendKeys "^{a}", True
    SendKeys "^{c}", True
    strBody = GetFromClipboard
    SendKeys "{ESC}", True

    blnSuccessful = FnSendMailSafe(strTO, strCC, strBCC, strSubject, strBody, "")

End Sub


Public Function GetFromClipboard() As String
   Dim MyData As DataObject
   Set MyData = New DataObject
   Dim sClipText As String
   On Error GoTo NotText

   ' Get data from the clipboard.
   MyData.GetFromClipboard

   ' Assign clipboard contents to string variable sClipText.
   sClipText = MyData.GetText(1)
   GetFromClipboard = sClipText

Exit Function
NotText:

   If Err <> 0 Then
      MsgBox "Data on clipboard is not text."
   End If

End Function
Random Solutions  
 
programming4us programming4us