SpamAssassin（スパムアサシン）は、コンテンツマッチング規則に基づいたスパムフィルタリングのプログラムであり、Apache License 2.0 でリリースされている。現在はApacheソフトウェア財団のプロジェクトとして実施されている。

SpamAssassinは様々なスパム検出技法を使っており、例えばDNSベースの技法、チェックサムベースの技法、ベイジアンフィルタ、外部プログラム、ブラックリスト、オンラインのデータベースなどを利用する。

このプログラムはメールサーバに組み込んで、そのサイトに到達した全メールを自動的にフィルタリングするのに使うことができる。また、電子メールクライアントに組み込んで、個々のユーザーが自身のメールボックス上で動作させることもできる。SpamAssassin は柔軟な設定が可能で、システム全体のフィルターとして使う場合でも、ユーザー単位の設定が可能である。

SpamAssassinは Linux New Media Award 2006 でLinuxベースのアンチスパムソリューション部門賞を受賞した。

 歴史 
SpamAssassinの開発者 Justin Mason は、1997年8月に始まった Mark Jeftovic の filter.plx というプログラムにいくつものパッチを提供していた。Mason は Jeftovic のコードを一から書き直し、それを2001年4月20日にSourceForge.netにアップロードした。これがSpamAssassinの始まりである。4.0.0 からは UTF-8 のメールにも対応した。

 使用法 
SpamAssassinはPerlで書かれており（CPANでは ）、通常は1人または数人のユーザーが受信するメールをフィルタリングする。独立したアプリケーションとしても別のアプリケーション（MailScannerなど）のサブプログラムとしても実行でき、デーモン（）と通信するクライアント（）としても動作可能である。後者の運用モードの方が性能的に有利だが、場合によってはセキュリティ上のリスクを増大させる可能性がある。

通常、汎用電子メールフィルタリングプログラムとして設定するか、電子メールクライアントがメールを受信するたびに直接呼び出す設定にする。procmailのような電子メールフィルタでは、ユーザーの ファイルの設定に従い、SpamAssassinとパイプで結んで受信メールを処理することもできる。

 運用 
SpamAssassinには、電子メールがスパムかそうでないかを判断するために適用する規則が大量に付属している。規則の多くは正規表現になっており、メールの本体やヘッダ部とのマッチングを行うが、SpamAssassinには他にもいくつかのスパム検出技法が使われている。規則群はSpamAssassinの文書では「テスト (test)」と呼ばれている。

各テストにはスコアがあり、そのテストにマッチしたメッセージにそのスコアが割り当てられる。スコアは正の場合と負の場合があり、正の値は「スパム」であることを示し、負の値はそうでないことを示す。メッセージに対して全テストを適用すると最終的なスコアが得られる。そのスコアが高いほどそのメッセージはスパムである可能性が高いということになる。

SpamAssassinには設定可能なスコアのしきい値があり、メッセージがスパムかどうかをそれによって判断する。通常、複数のテストとマッチしなければスパムとは見なされない。1つのテストとマッチしただけではしきい値に達しない。

SpamAssassinがあるメッセージをスパムと見なした場合、それを書き換えることができる。デフォルトの設定では、元々の電子メールの本文はMIMEアタッチメントとして添付され、本文にはその概略とスパムと判断する要因となったテストの説明が記述される。スコアが設定した値より低い場合、デフォルトではスコアとテストの概要が電子メールのヘッダ部に追加され、それをその後の処理に利用できる（例えば、怪しいメールとしてタグ付けするなど）。

SpamAssassinはシステム全体のサービスとしてインストールされていても、ユーザー毎の設定が可能である。設定はファイルから読み込むこともできるし、データベースから読み込むこともできる。ユーザーは例えば特定の個人からの電子メールをスパムと見なさないように設定できたり、特定の規則のスコアを変更したりできる。また、電子メールが書かれている言語を指定して受信することを宣言でき、SpamAssassinはそれ以外の言語で書かれたメールに高いスコアを割り当てる。

 ネットワークベースのフィルタ技法 
SpamAssassinは、以下のような機能もスパム検出手段としてサポートしている。
 DNS-ベースのブラックホールリスト
 SURBLやURIBL.comなどのURIブラックリスト（スパム発信元を監視しているサイト）
 チェックサムベースのフィルタリング。Distributed Checksum Clearinghouse、Vipul's Razor、Cloudmark Authority プラグイン（商用）など。
 Hashcash
 Sender Policy Framework

多くの場合、SpamAssassin用プラグインをPerlで書くことで追加でき、比較的簡単に追加できる。

 ベイジアンフィルタ 
SpamAssassinは自前の規則群をベイジアンフィルタで補強しようとするが、ベイズ学習は実際の入力を伴ったとき最も効果を発揮する。通常ユーザーは、スパムメールの具体例と普通のメールの具体例を入力する必要があり、それによって両者の違いを学習させる。このため、SpamAssassinにはコマンド行ツール があり、1つのメールやメールボックス丸ごとをスパムまたは普通のメールとして学習させることができる。

一般にユーザーはスパムと認識されなかったスパムメールを一旦特別なフォルダに分けておき、後からそのフォルダを指定して を使い学習させる。あるいはメーラーがサポートしている場合は、個々のメールに対して を自動的に呼び出すこともできる。学習をどのように行おうとも、SpamAssassinのベイジアンフィルタは以前に受信したスパムと似た電子メールには高いスコアを付けるようになる（正確に言えば、以前に受信したスパムメールがスパムであると判断されたのと類似した傾向のある電子メールに高いスコアを付ける）。

 ライセンス 
SpamAssassinは自由ソフトウェアでオープンソースであり、Apache License 2.0 でライセンスされている。3.0より以前のバージョンは Artistic License と GNU General Public License のデュアルライセンスだった。

 sa-compile 
sa-compile は SpamAssassin 3.2.0 に含まれているユーティリティである。SpamAssasin の規則群を決定性有限オートマトンにコンパイルし、プロセッサの性能をより効率的に発揮できるようにする。

 SpamAssassinの評価 
SpamAssassinは多くの場合、GTUBEという68バイトの文字列をスパムとして検出する。アンチウイルスソフトウェアの評価に使われるEICARテストファイルのように、GTUBEをSpamAssassinの評価に使うことができる。この文字列を 形式の電子メールの中に含め、SpamAssassinエンジンを通せば、スコア1000でスパムと判断する。