• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Automatically Forward Emails and Remove/Replace All or Part of Body

Outlook version
Outlook 2016 64 bit
Email Account
IMAP
#1
Hi! I'm trying to use a combination of a rule and macro to automatically forward emails I receive with a specific subject and delete or remove two hyperlinks in the body. I primarily want to forward an attachment and don't really mind what happens to the body. If removing the whole body is easier, that's ok.

The rule portion is working fine, but I can't seem to manipulate the body of the automatically forwarded email using any of the VBA I've found on this forum or others. I'm not even sure if the macro is running to be honest! Maybe there's an easier way to accomplish this, such as having one macro forward an email and alter the body rather than trying to use a rule?

Below is the email. The subject will always be "Monthly Local SEO Report," and I'm trying to remove the two hyperlinks at the bottom of the body.

I'm completely new to VBA and macros, only having run a few I found online in Excel, so any help would be greatly appreciated, thank you!

From: Local SEO Notification <bcarson@thinkstrategic.com>
Sent: Friday, June 8, 2018 2:14 PM
To: bcarson@thinkstrategic.com
Subject: Monthly Local SEO Report

An analytics report has been shared with you by Local SEO
has shared a Local SEO Analytics report. It's attached to this email.

Sincerely,
Local SEO Local Search Management

Local SEO
update notification preferences
 
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
#2
Here's the script I'm using

Code:
Sub myRuleMacro(item As Outlook.MailItem)
End Sub

Sub RemoveExpression()

Dim outNS As Outlook.NameSpace
Dim outFldr As Outlook.Folder
Dim outMailItems As Outlook.Items
Dim outMailItem As Outlook.MailItem




    Set outNS = Application.GetNamespace("MAPI")
    Set outFldr = outNS.GetDefaultFolder(olFolderDrafts)
    Set outMailItems = outFldr.Items
    
    For Each outMailItem In outMailItems
        
        outMailItem.Body = Replace(outMailItem.Body, "Local SEO", "")
    Next
    
    Set outMailItems = Nothing
    Set outFldr = Nothing
    Set outNS = Nothing
    
End Sub
Here's a screenshot of my rule
1528906071398.png
 
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
#3
This is the problem - this is used to process every message in the folder and you don't do this with rules.
For Each outMailItem In outMailItems
outMailItem.Body = Replace(outMailItem.Body, "Local SEO", "")
Next

Plus the rule wasn't doing anything:
Sub myRuleMacro(item As Outlook.MailItem)
End Sub


I didn't test this so i might have made a typo, but this is basically what you need - the item is identified by the message the rule is processing and is referenced using Item : (item As Outlook.MailItem)

Code:
Sub myRuleMacro(item As Outlook.MailItem) 
        item.Body = Replace(Item.Body, "Local SEO", "")
item.save
End Sub
 
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
#4
Thank you very, very much for the reply! Yes, I had noticed I hadn't set up the script properly yesterday and redid it, still to no avail. I tried your code just now, and still am not having any luck. It's weird the way the rule is ordered. It looks like running the script comes after forwarding the email, but I need the text replaced prior to forwarding it and don't see a way to change the order. Maybe the events are simultaneous? Regardless, below is the script and rule I'm using now. I've simplified the rule since I screen-shot it last to avoid over-complicating it at this stage. I'm still getting "Local SEO" in the body of the mail when I receive it and when it gets autoforwarded by the rule. I noticed in a few similar threads that HTML could be an issue. Do I need to use a different function?

1528986232433.png


Code:
Sub myRuleMacro(item As Outlook.MailItem)
        item.body = Replace(item.body, "Local SEO", "")
item.Save
End Sub
Again, thank you very much for your time!
 
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
#5
You can't use other actions in the rules along with run a script.

This will remove the links from the forward copy and forward it.

Code:
Sub myRuleMacro(item As Outlook.MailItem)
Set myForward = Item.Forward
myForward.Recipients.Add "alias@domain.com"

        myForward.body = Replace(myForward.body, "Local SEO", "")

myForward.Send

End Sub
 
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
#6
Thank you very much for the reply. I've updated the script and removed all other events from the rule; however, it looks like Outlook is having trouble running the script now.

1529596305726.png


Here's a screen shot of it:

1529596356421.png


And of the rule:

1529596386925.png


Any feedback would be greatly appreciated. Again, thank you so much!

1529596342782.png
 
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
#7
Did you try re-selecting the script? It looks like you either moved the script to a module or renamed the module
 
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
#8
Did you try re-selecting the script? It looks like you either moved the script to a module or renamed the module
Yes, I'm not quite sure what the issue was, but it wasn't quite that. After messing around endlessly, I have gotten it to work; however, it appears that the incoming message is getting forwarded twice. I don't believe this is an issue with the rule or script, as it works when I trigger it by mailing myself, but when I receive an email from a reporting system that triggers the rule it gets double forwarded. Would you happen to know a potential cause of that or how to prevent the same message from getting forwarded twice?
 
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
#9
Please disregard the previous post as I've resolved the issue. I wouldn't have been able to do it without you. Thank you very much!