A while ago there was a discussion about blocking top level domains for which there was no entry in Outlook's top-level domain list. As I recall it was done using binary within a registry entry and the actual registry entry was dependent upon which version of Outlook one was using.I'm seeing a lot of spam coming from a variety of trade domains. Which is to say that sometimes the spam is from @stateliquid.trade and sometimes from other.trade domains. Is there a way to devise a registry entry that would handle every domain that ended in ".trade" regardless of what followed the "@" symbol? Can I end it the registry to block, like we can do with top-level country domain?
The registry edit you are thinking of adds UK and EU to the Junk Mail filter's Blocked Top-Level Domain list. It won't work for the new TLDs as it only supports two letters.
Outlook does not support wildcard filters, so you won't be able to use a rule for @*.trade. However, you do two options.
You can use rules that look for words in the sender's address. Create a rule and use .trade as the word in the address. The leading dot will prevent it from matching the word trade in aliases or domain names so it won't trap email@example.com or firstname.lastname@example.org, but it might get some messages that a dot in the alias or use a subdomain for the mail server, as in email@example.com or firstname.lastname@example.org
Another option is adding .trade to the block senders list. Open Junk Email Options, Blocked Sender tab and add .trade to the list.
To avoid lost messages, peruse the Junk Email folder now and again and add valid addresses to the safe list or if using rules, as an exception.
If the solutions above don't work for you, you can use an ItemAdd macro or a run a script rule to look for the TLD.
ItemAdd Macro to Filter TLDs
This macro is added to ThisOutlookSession and checks the top-level domains (the letters after the last dot) for any in the Select Case statement. If a TLD matches, it moves the message to the junk folder. If you'd rather delete the messages, use Item.Delete instead.
Option Explicit Dim JunkFolder As Outlook.Folder Private WithEvents olInboxItems As Items Private Sub Application_Startup() Dim objNS As NameSpace Set objNS = Application.Session ' instantiate objects declared WithEvents Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Items Set JunkFolder = objNS.GetDefaultFolder(olFolderJunk) Set objNS = Nothing End Sub Private Sub olInboxItems_ItemAdd(ByVal Item As Object) On Error Resume Next Dim strSender As String Dim lLen strSender = LCase(Item.SenderEmailAddress) lLen = Len(strSender) - InStrRev(strSender, ".") + 1 Debug.Print strSender, lLen, Right(strSender, lLen) Select Case Right(strSender, lLen) ' add more TLDs as needed Case ".trade", ".info", ".tips" Item.Move JunkFolder ' Item.Delete End Select End Sub
Run a Script Rule Macro
This macro should be pasted into a new Module. After adding it to the VBA Editor and saving, create a new rule with the Run a Script action then select this script. The advantage of using this in a rule instead of the rule above is that this checks for the TLD. It will skip messages from email@example.com.
Sub DeleteSpam(Item As Outlook.MailItem) Dim strSender As String Dim lLen Dim objNS As NameSpace Dim JunkFolder As Outlook.Folder Set objNS = Application.Session Set JunkFolder = objNS.GetDefaultFolder(olFolderJunk) strSender = LCase(Item.SenderEmailAddress) lLen = Len(strSender) - InStrRev(strSender, ".") + 1 Debug.Print strSender, lLen, Right(strSender, lLen) Select Case Right(strSender, lLen) Case ".trade", ".info", ".tips" Item.Move JunkFolder ' Item.Delete End Select End Sub
How to use the Macro
First: You will need macro security set to low during testing.
To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, it’s at Tools, Macro Security. If Outlook tells you it needs to be restarted, close and reopen Outlook. Note: after you test the macro and see that it works, you can either leave macro security set to low or sign the macro.
Now open the VBA Editor by pressing Alt+F11 on your keyboard.
To use the macro code in ThisOutlookSession:
- Expand Project1 and double click on ThisOutlookSession.
- Copy then paste the macro into ThisOutlookSession.
Application_Startup macros run when Outlook starts. If you are using an Application_Startup macro you can test the macro without restarting Outlook by clicking in the first line of the Application_Startup macro then clicking the Run button on the toolbar or pressing F8.
More information as well as screenshots are at How to use the VBA Editor.
For more information about the registry edit, see Add EU to the International Blocked TLD List (not needed with Outlook