Tuesday, January 4, 2011

Blocked Senders List, a story of pain.....

One of the features that was introduced in Notes 7 that has provided many a happy user with some measure of control over the spam they receive is the Block Senders Feature within the mail file.  In my experience, it works pretty well.  But just before the holidays, one of the higher-higher up's ran into a problem with his list.  Any time he wanted to add an address to the list, he was told that he reached the maximum and it wouldn't allow him to add any more.  Doing a quick search, we found that it appeared 100 entries or a maximum of 32K, was all that the list could handle.  Okay, didn't think much off it, passed the information along and went about my vacation.
Upon my return yesterday, this still appeared to be a hot topic.  The higher-higher up still was wondering how they could add more entries in the block list.  We again did a search for information and found the same thing on Notes.Net, 100 entries or 32K.  We suggested cleaning the list, taking out old ones and adding domains instead of email addresses.  It should only be around 100 entries, right?  I mean that's what the Interwebs told us.
Well, I needed to start digging a little more into this, and what I found astounded me.  To start with, I needed to get a dump of what entries where in the Blocked Senders List hidden deep within the bowels of the mail file.  With some help from my Twitter peeps and some more Google searches, I found this entry on Notes.Net on how to export the list to a text file.  So, I created a local blank database, copied the Lotuscript into the database, and POW!  I was able to pull out the users block list to a text file.  I of course wanted to see how many entries were in the file, so I opened it in Excel.  Jaw drop.  There was 1113 entries.  That's slightly, just a little bit more then the 100 that we thought was the maximum.  Just by a few.  And when I looked at the text file, it's size was just over 32K.  So the lesson learned with this is:
1.  You can extract users Block Senders Lists very easily.
2.  You can have more then 100 users
3.  The maximum size of the Blocked Senders List is 32K
4.  Don't believe everything you read on the Interwebs, (except this blog entry, of course)
It would be nice if that 32K limit could be increased.  I am now tasked with finding a workaround to empty out his Block Senders List, but still block that users.  So I have to look at our anti-spam solution to fill that need.  If it can do it.  Oh well. Such is the existence of a Domino Administrator.


Lotus Evangelist said...

Andy, Versions having different configs and limitations aside.
Could you not create a server side entry for these? Or set up a mail rule with a bunch of them?
What about changing his email address and setting up an agent to match people in his pnab to allow pass through. And have him treat the old email like a spam folder, check it every now and then, just in case?
Just thinking out loud.

Andy Donaldson said...

I was thinking about the server side rule, but with 1113 entries....
I'm going to beat up my spam vendor for now. Create a rule on the appliance, off load all those entries and then let him start fresh.

David Schaffer said...

Great information. But once you have the list how do you remove entries?

Maria Helm said...

While the "Block Senders" feature does actually block email from the listed senders, it has been my experience that it is rather useless for blocking actual spam. this is because most spam never comes form the same email address twice. Thus, users add name after name to their 'block senders' list, but because they never get email from that same name again, the list entry is useless.

A better solution is to use a public RBL, and server blacklists, to block the majority of spam. I've found this to be block the VAST majority of spam, as it blocks the servers and sources.

After that, have users report repeat offenders. You can assist them in legitimate unsubscribes, or block IP/domains at the connection or server level (server blacklists). The other benefit of using RBLs to prevent the initial connection is that the message never enters your system, reducing the bandwidth waste and diskspace waste.

User Sender Block Lists are helpful when there is a legitimate sender (vendor, report system, newsletter) that is useful to some users, but not others, but that for whatever reason the user cannot unsubscribe from. User Mail Rules are also useful in those instances. But because actual spam never comes from legitimate users, it never comes from the same user twice. Additionally, the wordage and other attributes are constantly changing. Therefore the options available to the end user (block sender, mail rules) are ineffective at best, and time wasting at worst.

Richard Schwartz said...

IMHO: It's time to wean your users from using the lists. The only thing Domino's user-maintained block lists are really effective at is blocking non-spam (i.e., mailing lists that someone really did sign up for) that the users don't want to receive any more; and frankly, blocking this traffic instead of properly unsubscribing from the lists is not appropriate. The block list should be reserved for the cases where a legitimately subscribed-to mailing list's unsubscribe feature is broken. For the vast majority of actual spam, block lists are ineffective for blocking further messages, just deleting whatever does get past your boundary solution wastes less of the users' time. Sure, there's a small psychological boost from the perception of "doing something about it", but unless your boundary solution is integrated with the block lists that's all it amounts to. Does your boundary solution have a mechanism for users to report spam? If so, that would be a better way to give them that psychological boost, because it really might help.

paul nguyen said...

I ran into the same issue, opened a pmr and IBM replied that this is not intended to be a primary spam blocker, thus the 32K limit. A co-worker came up with an agent to extract all the address to an excel spreadsheet where you can copy/paste each individual blocked address to your primary spam blocker software. We use Proofpoint at our company.

Here is a utility that can be used to export the Blocked Senders List from a user's mailbox to a text file which can be used to copy & paste entries into the ProofPoint personal account ==> The resulting text file is saved on your local NotesData folder under the default name of UserName_blocked . Please do not delete the existing document in the database, the agent needs to have a document in the database to run.
Here is the code for it(test before using):
Agent ExportBlockSendersList
Created Feb 22, 2012 by Albert Nguyen
Description: Comments for Agent

Option Public

Option Declare

Sub Initialize

Dim s As NotesSession
Dim ws As NotesUIWorkspace
Dim mailDb As NotesDatabase
Dim profile As NotesDocument
Dim dbName As Variant
Dim dbServerName As String
Dim dbFileName As String
Dim blockedArray As Variant
Set s = New NotesSession
Set ws = New NotesUIWorkspace

dbName = ws.Prompt(13, "Select Mail Database", "Select the database to extract a blocked senders list from")
If IsEmpty(dbName) Then
MessageBox "No database selected; agent quitting."
Exit Sub
End If
dbServerName = dbName(0)
dbFileName = dbName(1)
Set mailDB = s.GetDatabase(dbServerName, dbFileName)
If Not mailDb.IsOpen Then
Call mailDb.Open("", "")
End If
Set profile = mailDb.GetProfileDocument("CalendarProfile")
If profile.HasItem("$Filter_BlockAddressList") Then
blockedArray = profile.GetItemValue("$Filter_BlockAddressList")
If (UBound(blockedArray) = 0) And (blockedArray(0) = "") Then
MessageBox "No blocked addresses for this database."
Exit Sub
End If
Dim ownerName As NotesName, ownerFilePart As String
Set ownerName = s.CreateName(profile.GetItemValue("Owner")(0))
ownerFilePart = Join(Split(ownerName.Abbreviated, "/"), "_")
Dim filePath As Variant
filePath = ws.SaveFileDialog(False, "Save Blocked Senders List As", "Text Files|*.txt",,ownerFilePart + "_blocked.txt")
If IsEmpty(filePath) Then
MessageBox "No filename selected; agent quitting."
Exit Sub
filePath = filePath(0) 'converts single-element array to string
Dim fileNum As Integer
fileNum = FreeFile
Open filePath For Output As fileNum
ForAll blocked In blockedArray
Write #fileNum, blocked
End ForAll
Close fileNum
End If
MessageBox "No blocked addresses for this database."
End If

End Sub
===================================Hope this help.