Bonjour,
J'ai repris la source déposé par defrance (
http://www.vbfrance.com/code.aspx?ID=19925) avec mes petites modifs sur son code. Le but est toujours de virer un maximum de courrier SPAM en gardant les Emails qui me sont réelement destinés .
Dans le principe je regarde quant un Email arrive dans la boite de réception
Je regarde quelques points qui sont bien ententendu des critères qui me sont propres et pas forcément ceux de tous le monde.
Un Email sans Sujet -> poubelles
Un email avec des fichiers .vbs ou .pif pour mon cas c'est un virus
Suivant l'adresse du destinataire il y a plusieurs solutions : Certain de mes
adresses sont clean ( jamais de spam) donc on les laisse tranquiles les autres ben A voir dans le code.
Pour ce qui concerne les mots clés ou adresse indésirable je laisse ceci au règles de l'assistant de gestion de message de outllok . Ces régles seront appliqués au Email restant dans la la boite de réception. Ce qui me permet de virer les Elargisseur de penis ( Merci le mien me suffit ) ainsi que le viagra en vente libre la aussi je me suffit à moi même.
Source / Exemple :
Option Explicit
Private WithEvents olInboxItems As Items
Private WithEvents olSentMailItems As Items
'====================================================================================================================================================
' Declaration des variables
'====================================================================================================================================================
Dim olInboxFolders As Folders
Dim olSentMailFolders As Folders
Dim olDeletedFolder As MAPIFolder
Dim olInbox As MAPIFolder
Dim lItem As Object
'
' Initialisation au démarrage d'outlook
'
Private Sub Application_Startup()
Dim objNS As NameSpace
Dim destFolder As Object
Set objNS = Application.GetNamespace("MAPI")
Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Items
Set olInboxFolders = objNS.GetDefaultFolder(olFolderInbox).Folders
Set olSentMailItems = objNS.GetDefaultFolder(olFolderSentMail).Items
Set olSentMailFolders = objNS.GetDefaultFolder(olFolderSentMail).Folders
Set olDeletedFolder = objNS.GetDefaultFolder(olFolderDeletedItems)
Set olInbox = objNS.GetDefaultFolder(olFolderInbox)
Set objNS = Nothing
'Permet de créer un répertoire tempo pour Y classer des Emails douteux
' Email à analyser
On Error Resume Next
Set destFolder = olInboxFolders.Add(">>>Douteux", olFolderInbox)
End Sub
Private Sub Application_Quit()
' disassociate global objects
Set olInboxItems = Nothing
Set olInboxFolders = Nothing
Set olSentMailItems = Nothing
Set olSentMailFolders = Nothing
Set olInbox = Nothing
End Sub
'-----------------------------------------------------------------------------
' A l'arrivée d'un nouvel Email
' Test un certain nombre de trucs
' Si l'email est douteux alors il sera transféré dans le dossier
' >> douteux de plus Un commentaire sera rajouté au début du Sujet ce qui permet de
' Visualiser rapidement la raison de sa mise à l'écart
' Depuis Que j'utilse ces techniques je vire 95% des Emails Merdiques
' Avec assez peu d'erreur C'est pour cette raison que les Emails sont mis dans douteux ce qui laisse une chance
' De rattraper L'email Ecarté par erreur :))
Private Sub olInboxItems_ItemAdd(ByVal Item As Object)
Dim Ind As Integer
Dim AVirer As Boolean
Dim Strcmp As String
Dim Ind_B As Integer
Dim RechercheSTR As String
Dim DetectionSpam As String
Dim DejaVue As Boolean
' si un nouveau message arrive
On Error Resume Next
If Item.Class = olMail Then
' Si pas de sujet alors Poubelle
' Méthode Super efficace dans mon cas
' Le minimum si on t'envoi un Mil c'est de te dire pourquoi
' Si c'est pas le cas Pas la peine de prendre le temps de le lire
If Len(Item.Subject) = 0 Then
Item.Move olDeletedFolder
Else
'''''''''''''''''''''''''''''''''''''''''''''''
' Regarde le sujet
'''''''''''''''''''''''''''''''''''''''''''''''
' @ dans le sujet comme vi@gra ou v@alium
' Méthode pas vraiement efficace
' A améliorer
If InStr(UCase(Item.Subject), "@") > 0 Then
Item.Subject = "[@ Dans Sujet] " + Item.Subject
Item.Move olInboxFolders(">>>Douteux")
GoTo FinAnalyse
End If
'''''''''''''''''''''''''''''''''''''''''''''''
' Regarde l'Expéditeur
'''''''''''''''''''''''''''''''''''''''''''''''
'Test sur un nom d'Expéditeur
' Méthode peu efficace et doublon avec Expéditeurs indésirable de outlook
If Item.SenderName = "@" Then
Item.Subject = "[SenderName=@] " + Item.Subject
Item.Move olInboxFolders(">>>Douteux")
GoTo FinAnalyse
End If
'''''''''''''''''''''''''''''''''''''''''''''''
' Test les destinataires
'''''''''''''''''''''''''''''''''''''''''''''''
' Si pas de destinataire
' Méthode 100% Efficace dans mon cas
If Item.Recipients.Count = 0 Then
Item.Subject = "[Pas de destinataire] " + Item.Subject
Item.Move olInboxFolders(">>>Douteux")
GoTo FinAnalyse
End If
'''''''''''''''''''''''''''''''''''''''''''''''
' Regarde les adresses du/des destinataires
'''''''''''''''''''''''''''''''''''''''''''''''
AVirer = True
DejaVue = False
' Si dans tous les destinataires une de mes adresses n'apparait pas alors
' Avirer =true
' Méthode très efficace dans mon cas
RaisonSpam = "AucuneAdressePrésente"
' Boucle sur nombre de destinataires
For Ind = 1 To Item.Recipients.Count
'Debug.Print UCase(Item.Recipients.Item(ind).Address)
Select Case UCase(Item.Recipients.Item(Ind).Address)
' Adresse poubelle
Case "POUBELLE@SPAM.FR"
AVirer = False
' plus de 2 destinataires
If Item.Recipients.Count > 2 Then
Item.Subject = "[Sur Free + 2 destinataires] " + Item.Subject
Item.Move olInboxFolders(">>>Douteux")
GoTo FinAnalyse
End If
' Adresses newsgroup
' A ne pas virer
Case "NEWSGROUP@YAHOOGROUPES.FR", "NEWSGROUPE@YAHOOGROUPES.FR"
AVirer = False
DejaVue = True ' Evite les tests sur le contenu
' Adresse Perso Clean
' Adresse donnée seulement aux amis
' 100% non SPAM
Case "PERSO@PERSO.FR"
AVirer = False
DejaVue = True ' Evite les tests sur le contenu
' Adresse boulot Clean
' Adresse donnée seulement au compte goutte
' 100% non SPAM
Case "BOULOT@BOULOT.COM"
AVirer = False
DejaVue = True ' Evite les tests sur le contenu
' Adresse boulot
Case "INFO@BOULOT.COM", "CONTACT@BOULOT.COM"
' Regarde les deux première lettres
' si pour toutes les adresses c'est pareil alors
' ca sent le SPAM
' Marche Moyen
If Item.Recipients.Count > 2 Then
Strcmp = UCase(Mid$(Item.Recipients.Item(1).Address, 1, 2))
For Ind_B = 2 To Item.Recipients.Count
If UCase(Mid$(Item.Recipients.Item(Ind).Address, 1, 2)) <> Strcmp Then
AVirer = False
Exit For
End If
Next Ind_B
RaisonSpam = "AdresseBoulotAvecListeAdresse"
Else
AVirer = False
End If
' Adresse véreuse Particulière
' par exemple utilisé pour laisser ses coordonées sur un site
' Ce qui arrive ici = 99.9 % SPAM
Case "ULTRA_POUBELLE@SPAM.FR"
AVirer = True
Item.Subject = "[Adresse POUBELLE] " + Item.Subject
Item.Move olDeletedFolder
GoTo FinAnalyse
Exit For
Case Else
'MsgBox " Un Mail pour " & Item.Recipients.Item(Ind).Address
End Select
Next Ind
' Si Avirer alors Action !!!!!!!!!!!!!!
If AVirer Then
Item.Subject = "[" + RaisonSpam + "] " + Item.Subject
Item.Move olInboxFolders(">>>Douteux")
GoTo FinAnalyse
End If
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' regarde les attachment
' et vire les fichiers .pif et .VBS Source de virus dans mon cas
' + dans mon cas les fichiers DELETE0.TXT Email scanné et detection virus
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For Ind = 1 To Item.Attachments.Count
If InStr(UCase(Item.Attachments.Item(Ind).DisplayName), ".PIF") > 0 Or InStr(UCase(Item.Attachments.Item(Ind).FileName), ".PIF") > 0 Then
Item.Move olDeletedFolder
GoTo FinAnalyse
End If
'Fichier scanné par Antivirus
If InStr(UCase(Item.Attachments.Item(Ind).DisplayName), "DELETED0.TXT") > 0 Or InStr(UCase(Item.Attachments.Item(Ind).FileName), "DELETED0.TXT") > 0 Then
Item.Move olDeletedFolder
GoTo FinAnalyse
End If
If InStr(UCase(Item.Attachments.Item(Ind).DisplayName), ".VBS") > 0 Or InStr(UCase(Item.Attachments.Item(Ind).FileName), ".VBS") > 0 Then
Item.Move olDeletedFolder
GoTo FinAnalyse
End If
Next Ind
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Regarde le contenu HTML
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Beaucoup de pub arrive sous le format HTML
' Souvent Il y a un lien vers un site
' détecte la présence de lien
' Méthode qui marche pas mal mais pas fiable à 100%
'
' "src=" + Chr(34) + "http://"
If Len(Item.HTMLBody) > 0 And DejaVue = False Then
RechercheSTR = "src=" + Chr(34) + "http://"
RechercheSTR = UCase(RechercheSTR)
If InStr(UCase(Item.HTMLBody), RechercheSTR) > 0 Then
Item.Subject = "[PresenceLienHTML] " + Item.Subject
Item.Move olInboxFolders(">>>Douteux")
GoTo FinAnalyse
End If
End If
End If
End If
FinAnalyse:
End Sub
' Fonctions pouvant être rajoutées dans la barre des boutons outlook
' Soit pour vaoir certainne info sur un Mail vant de l'ouvrir
' soit pour tester des trucs sur les Emails avant de rajouter ces méthodes dans
' L'analyse
'Info sur un Email
'
Public Sub Info()
Dim lItem As Object
Dim Ind As Integer
Dim msg_txt As String
For Each lItem In Application.ActiveExplorer.Selection
On Error Resume Next
' si c'est un mail
If IsObject(lItem) Then
If lItem.Class = olMail Then
msg_txt = lItem.SenderName & " Email : " & lItem.SentOnBehalfOfName
For Ind = 1 To lItem.Recipients.Count
msg_txt = msg_txt + Chr(10) + "Recipient :" _
& lItem.Recipients.Item(Ind).Address
Next Ind
End If
End If
Next
MsgBox msg_txt
End Sub
'Info sur un Email
Public Sub Info2()
Dim lItem As Object
For Each lItem In Application.ActiveExplorer.Selection
On Error Resume Next
' si c'est un mail
If IsObject(lItem) Then
If lItem.Class = olMail Then
'Contenu HTML
'MsgBox lItem.HTMLBody
' nom du destinataire
MsgBox "Nom du destinataire :" & lItem.ReceivedByName _
& Chr(10) & "Confirmation relecture :" & lItem.ReadReceiptRequested _
& Chr(10) & "Destinataires de la réponse :" & lItem.ReplyRecipientNames _
& Chr(10) & "Destinataires :" & lItem.To _
& Chr(10) & "Destinataires CC :" & lItem.CC _
& Chr(10) & "Destinataires BCC :" & lItem.BCC
End If
End If
Next
End Sub
' Test pour les liens HTML
Public Sub Test_Un_truc()
Dim lItem As Object
Dim RechercheSTRA As String
Dim RechercheSTRB As String
For Each lItem In Application.ActiveExplorer.Selection
On Error Resume Next
' si c'est un mail
If IsObject(lItem) Then
If lItem.Class = olMail Then
' Regarde le contenu
' "src=" + Chr(34) + "http://"
If Len(lItem.HTMLBody) > 0 Then
RechercheSTRA = "src=" + Chr(34) + "http://"
RechercheSTRA = UCase(RechercheSTRA)
If InStr(UCase(lItem.HTMLBody), RechercheSTRA) > 0 Then
MsgBox "bingo!!!" & InStr(UCase(lItem.subjet), RechercheSTRA)
End If
End If
End If
End If
Next
End Sub
' Caratères bizarre dans Email comme par exemple Mail asiatique ou petit malin avec le Ì , ì pour vìagra
' Méthode en cours d'expérimentation
Public Sub Test_Un_autre_truc()
Dim lItem As Object
Dim Ind As Integer
Dim RechercheSTRA As String
Dim RechercheSTRB As String
For Each lItem In Application.ActiveExplorer.Selection
On Error Resume Next
' si c'est un mail
If IsObject(lItem) Then
If lItem.Class = olMail Then
For Ind = 127 To 255
Select Case Ind
' Caractère pouvant être présent dans un Email francais
Case 200, 201, 219, 224, 231, 232, 233, 234, 244, 248, 251 ' Respectivement ÈÉÛàçèéêôøû
Case Else
If InStr(lItem.Subject, Chr$(Ind)) > 0 Then
MsgBox "bingo Taï !!!-<" & Chr$(Ind) & ">"
Exit For
End If
Next Ind
End If
End If
Next
End Sub
Conclusion :
Les routines rajoutées à la fin du code peuvent être rajouté à la barre des boutons d'outlook pour avoir d'autres infos sur un Mail ou pour tester des petits truc avant de l'intégrer comme détection de SPAM.
Cette méthode marche plutot bien dans mon cas .. A vous de faire votre propre sauce avec vos propres règles.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.