Steve said:
>Just checking to see if anyone has seen
>this problem and written a rule to score these emails

I don't actually use SpamAssassin. I use another program. But I subscribe to
the list for ideas and trends.

I use another spam filter which, like SA, is also extensible. In this other
program, I wrote a custom rule which I've pasted at the end of this message.
You may want to cut and paste this into a text editor for better viewing.

Also, notice that the collection="text_packed" statement refers to the fact
that the text was stripped of all spaces and punctuation before processing
by this rule. Finally, the "/|" in the regular expressions would be "|" in
most programs (logical "or").

I haven't updated this Investment Spam Rule in a few months. I've noticed
many such spams making it past this custom rule which use more letter
obfuscation. I'm itching to update this to take advantage of such (i.e.
"sma|| caps")... but I haven't had the chance to make such improvements
(yet).

Perhaps you could use what I've done as a starting point for writing the SA
rule.

Rob McEwen

<rule result="reject_InvestmentSpam">
<title>phrases found in investment spam</title>
<scope>
<header>all</header>
<body>all</body>
</scope>
<expressions collection="text_packed" oninit="unique=0;score=0;notspam=0"
logic="return ((score &gt;= 8) &amp;&amp; (unique &gt;= 7) &amp;&amp;
(notspam == 0)) || ((score &gt;= 12) &amp;&amp; (unique &gt;= 6) &amp;&amp;
(notspam == 0)) || ((score &gt;= 15) &amp;&amp; (unique &gt;= 5) &amp;&amp;
(notspam == 0))">
<expression collection="original" casesensitive="no" type="regex"
onfirstmatch="unique += 2" onmatch="score += 1">\((Nasdaq\|NYSE):
\w+\)</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">(%\|percent) *equity</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">52wkRange</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">Advertiserisbeingpaid</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">ActQuickly</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">alternativetobluechips</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">astuteinvestors</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">attentionfromaroundtheworld</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">BeforeInvesting</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">BelievedToBeReliable</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">bestpick</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">bigPRcampaign</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Bigyearexpected</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">breakingnews</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">buyrecommendation</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">businesswire</expression>
<expression collection="original" casesensitive="no" type="regex"
onfirstmatch="unique += 1" onmatch="score += 1">CityBrokers</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Compan(y\|ies)ToWatch</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">conflictofinterest</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">CurrentPrice</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">currentlytrading</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">discloses?thereceipt</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">discloses?theholding</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">dontmiss</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">dontsleep</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">DueDiligence</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">earningsofapproximately</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">earningsgrowth</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">earningsestimates</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">emergingcompany</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">EmergingGrowth</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">EmergingStock</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">entireinvestment</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">EquityAlert</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">expansionplans</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Expect(some\|strong\|somestrong)Demand</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">expected?toexplode</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">expected?tomake</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">expected?tosurge</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">expecthugecoverage</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">explosivelyprofitable</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">FellowInvestors</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Firsttimeinvestors</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">foorward</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">formalannouncement</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">(forward\|future)lookingstatements</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">GalinaBreakingNews</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">GalinaNews</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">GoingToFly</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">greatdemand</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">GroundBreaking</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">growingatarapidrate</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">goodluck</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 2">goodnewsjustkeepsoncoming</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">GrabthisHOT</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">greatprofits</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">growthstockreport</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">hasacquired</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">HighDegreeOfRisk</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">HotTradingAlert</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">HugeTradingAlert</expression>
<expression collection="original" casesensitive="no" type="regex"
onfirstmatch="unique += 2" onmatch="score +=
1">High-projection:</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">(hasbeen|\willbe)compensated</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">heldcorporation</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">historyofgrowth</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">historyofsteadygrowth</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">hotnewissue</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">increasedexposure</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">increaseitsmarketpresence</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">IntentToProfit</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">investmentexpert</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">IsExploding</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">jointventure</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">largePRcampaign</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">letterwaspaid</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">liquiditywillincrease</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">loooking</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">lossofyour</expression>
<expression collection="original" casesensitive="no" type="regex"
onfirstmatch="unique += 2" onmatch="score += 1">Low-projection:</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">MarketPotential</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">marketishot</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">marketstandout</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">MustActQuickly</expression>
<expression collection="original" casesensitive="yes" type="regex"
onfirstmatch="unique += 1" onmatch="score += 1">Name_of_stock:</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">newsalert</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">newsletterwaspaid</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">newsrelease</expression>
<expression collection="original" casesensitive="yes" type="regex"
onfirstmatch="unique += 1" onmatch="score += 1">NEWS:</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">onthemove</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">openingprice</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">OTCNews</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">outstandingshares</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">PaidAdvertisement</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">PaidAFee</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">paidprofile</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Pastperformance</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">pennystock</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">PinkSheets</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">poised</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">PRcampaign</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">pressreleasesource</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">privatelyheld</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">profiledcompany</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">profitabilitysoon</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Potential</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 0.5">Projections</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">publicfloat</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">publisher(hasbeen|\willbe)</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">rapidgrowth</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">RatingUndervalued</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">ReasonsToBuy</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">recentpressrelease</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">RecentPrice</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">RecentNews</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">RecommendationBUY</expression>
<expression collection="original" casesensitive="no" type="regex"
onfirstmatch="unique += 2" onmatch="score += 1">RECOMMENDATION:
?STRONG_BUY</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">recordhigh</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">risingstar</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">settoexplode</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">ShortTermTradingProfits</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">SmallCap[^i]</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">soared</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">speculativeBUY</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 0.3"
onmatch="score += 0.3">specialcompany</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">startearningmoneyNOW</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">startearningmoney</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">stellarstock</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">Stocck</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">St0x</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">StockSymbol</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">StockRating</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">stockwillexplode</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">StrongBuy</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">strategicalliances</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">SubstantialPosition</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">thereceiptof</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">thirdpary</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">ThisIsYourChance</expression>
<expression collection="original" casesensitive="no" type="regex"
onfirstmatch="unique += 1" onmatch="score += 1">Ticker:</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">ToBeProfiled</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">TradingAlert</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 0.5"
onmatch="score += 0.5">UniqueProduct</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">unmatched</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">ValuedPrice</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">VerifyAllClaims</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">Weexpect</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">wehavebeenpaid</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 2"
onmatch="score += 1">wewerepaid</expression>
<expression casesensitive="no" type="regex" onfirstmatch="unique += 1"
onmatch="score += 1">WallStreet</expression>
</expressions>
</rule>
 

Reply via email to