How about this:
3 different settings in chat filters as well as text commands.
Filter Off - The server chat filter is set to off and you will see all chat in any zone.
Contextual Filter - This setting automatically turns the filter off when entering towns and automatically turns it on outside towns.
Permanent On Filter - Server chat is filtered out completely until you turn it off again.

Type commands could be something like:
/servchat off
/servchat on
/servchat town

And it goes without saying that a minimum wait time between messages and standard things like the same limits that apply to shouts and tells now should be used.