メール用のスパムフィルターを作成する

画像



gmail.comのおかげですべてのメールボックスをまとめて積み重ねることができました。 しかし、私は問題に遭遇しました。すべてのメッセージが1つのメールに届くと、すでにスパムに気づき始めています。 そして、手でスパムを登って除去するのが面倒で、メールサービスに既に組み込まれているフィルターは必ずしも満足できるものではありません。



メールをきれいにするボットを作ってみてください。なんらかの理由でさらに多くのスパムがはっきりと見えるのはなぜですか?

私の目で私がスパムとして強調したものは次のとおりです。

-すべて大文字で書かれている

-主なアイデアがポルノ、デート、カジノ、お金などのメッセージ

-誰かが定期的にメールを送信し、それを読んでいない場合



最初は、 imap phpをメールとの密接な連携のために設定する必要があります。 次に、この記事で最適はないアルゴリズムをいくつか書いてください。 誰もが独自のフィルターを必要とします(たとえば、ポルノサイトからのスパムを期待する人もいます)。



心にはアイデアと情報しかありません。 そして、フィルターを配置したい人のために、すでに基盤があります。



はじめに...


imap phpの設定方法については、検索できる記事がたくさんあります。 私はUbuntuを持っています。数分でこの問題を解決し、設定を少し変更しました。



すでにimapを構成している場合は、接続できます。

<?php

//

$imapaddress = "{imap.gmail.com:993/imap/ssl}";

$imapmainbox = "INBOX";

$maxmessagecount = 10;

$user=" gmail @gmail.com";

$password=" ";



// ,

spam_delete($imapaddress, $imapmainbox, $user, $password, $maxmessagecount);








今、私たちは手紙を受け取るメールに行きます。 彼らが手紙を受け取ったとき、テキスト全体を単語に分割し、数を数えます。 次に、サイクルに従って、単語に従って、この単語がこの手紙がスパムであることを確認できるかどうかを確認します。 私の意見ではスパムであるという点については、上記で説明しています。 次に、このスパムメールが次の式に基づいている可能性を見つけます。



確率=文字内の単語数/フィルターを通過しなかった単語



コード内でのすべての動作は次のとおりです。

function spam_delete($imapaddress, $imapmainbox, $imapuser, $imappassword, $maxmessagecount)

{

$imapaddressandbox = $imapaddress . $imapmainbox;



//

$connection = imap_open ($imapaddressandbox, $imapuser, $imappassword)

or die("Can't connect to '" . $imapaddress .

"' as user '" . $imapuser .

"' with password '" . $imappassword .

"': " . imap_last_error());



echo "Gmail information for " . $imapuser ."";



echo "Inbox headers\n";

$headers = imap_headers($connection)

or die("can't get headers: " . imap_last_error());



// - , 10

$totalmessagecount = sizeof($headers);



echo $totalmessagecount . " messages";



if ($totalmessagecount<$maxmessagecount)

$displaycount = $totalmessagecount;

else

$displaycount = $maxmessagecount;



echo "Message bodies\n";

//

for ($count=1; $count<=$displaycount; $count+=1)

{

$body=imap_fetchbody($connection,$count,"2");

//

$text=explode(" ",$body);

$spam=0;

// -

$n=count($text);

for ($i=0;$i<$n;$i++) {

$spam+=test_spam($text[$i])==1:1?0;

}

// ,

// - , ,

// ,

$result=$n/$spam;

// 50% ,

if ($result>0.5) {

imap_delete($connection,$count);

imap_expunge($connection);

}

}

// imap

imap_close($connection);

}









スパムチェックアルゴリズムは非常に単純で、例として書かれています。 より強力でインテリジェントなアルゴリズムを作成する場合は、「Programming a Collective Mind」という本でスパムに関するいくつかの章を読むことをお勧めします。 また、Habréでスパムについても書いています。



アルゴリズムは2つのアクションを実行します。

1.スパムで最もよく見られる単語を特定します。

2.大文字と小文字をチェックします。すべてが上部にある場合、これはおそらくスパムです。



コード自体:

//

function test_spam ($string) {

//

//

$array=array('' => 1, '' => 1, '' => 1, '' => 1);

if ($array[$string]==1) {return 1;}

//

if (strtolower($string)!==$string) {

return 1;

}

return 0;

}

?>







2つの例でテストされ、動作するようです...



PSごみと戦う方法を聞いてとてもうれしいです。 コードに間違いを見つけてもあまり誓わない場合、これは単なる例であり、さらに何かを開発するための基礎になります。



All Articles