Outlook Gelen Mail İçerik Filtreleme VBA

Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Bugün virüslü mailler için birşey yapabilir miyim diye düşününce, local bir çözüm olarak her gelen maili geldiği anda hem konu hemde içerik olarak inceleyen bir VBA kodu kısmen de olsa çözüm olur diye düşündüm.

Kodlar henüz test aşamasında. Mail geldiği anda hemen konu ve içerik olarak yasakkelimeler i arıyor ve bulduğunda gelen kutusu altındaki Deneme klasörüne taşıyor.

yasakkelimeler = "DROPBOX,DROPBOXCONTENT"

Bu kelimeler virgül ile çoğaltılabilir.

Bu kodlare eklemeler yapılarak yapılabilecekler
* Eklenti türüne göre kontroller yapılabilir.
* Virüs olabilecek mailler geldiği anda silinebilir.
* Outlook kuralları kullanmadan bu kodlar ile gelen mailler üzerinde işlemler yapılabilir. (Başka birine yönlendirme, farklı klasörlere kopyala, taşıma gibi)

Kodların çalışması için Outlook da makrolar etkinleştirilmelidir. Bu ne kadar güvenli bir durum olur tartışılır :)

Kodlar outlook da ThisOutlookSession bölümüne kopyalanmalı ve outlook yeniden başlatılmalıdır.
Kod:
Public olApp As Outlook.Application
Public objNS As Outlook.NameSpace
Public tasinacak As Boolean
 
Private WithEvents Items As Outlook.Items
  
Private Sub Application_Startup()
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  On Error GoTo ErrorHandler
  Dim Msg As Outlook.MailItem
  Dim Subject As String
  
  yasakkelimeler = "DROPBOX,DROPBOXCONTENT"
  
  If TypeName(Item) = "MailItem" Then
    Subject = Item.Subject
    veri = UCase(Item.Body)
    kelimeler = Split(yasakkelimeler, ",")
    For i = LBound(kelimeler) To UBound(kelimeler)
     kelime = kelimeler(i)
     If InStr(Subject, kelime) > 0 Or InStr(veri, kelime) > 0 Then
        Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")
        Exit For
     End If
    Next i    
        
  End If
ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub
 
Katılım
17 Nisan 2009
Mesajlar
30
Excel Vers. ve Dili
MS OFFİCE 365
Merhaba
Mail içeriklerinde yapılan bu kod düzenlemesi gelen kutusuna gelen e-postaların belirli gelen kutusu alt klasörlerine taşınması için VBA düzenlemesi yapılabilir mi?
 
Katılım
19 Şubat 2007
Mesajlar
630
Excel Vers. ve Dili
Ofis 365 Tr- 64 Bit
Altın Üyelik Bitiş Tarihi
08-01-2024
Sayın Asri Hocam çok güzel çalışma ellerinize emeğinize sağlık Hocam müsaitseniz birşey sormak istiyorum. hocam bu mantıkla acaba gelen e mail içeriğini kriter belirliyerek excele çekilebilirmi. örnek 1. ktiter konu içeriğine göre 2 . ktiter .e malini gönderen kişi ile 3 . kriter ise tarih aralığı olarak çekilebilirmi.
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Merhaba
Mail içeriklerinde yapılan bu kod düzenlemesi gelen kutusuna gelen e-postaların belirli gelen kutusu alt klasörlerine taşınması için VBA düzenlemesi yapılabilir mi?
Bu şekilde deneyiniz. Kırmızı alan mail belirleme ve Deneme klasörüne taşımayı belirler.

Kod:
Public olApp As Outlook.Application
Public objNS As Outlook.NameSpace
Public tasinacak As Boolean
 
Private WithEvents Items As Outlook.Items
  
Private Sub Application_Startup()
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  On Error GoTo ErrorHandler
  Dim Msg As Outlook.MailItem
  Dim Subject As String
  
  If TypeName(Item) = "MailItem" Then
     Subject = Item.Subject
     If Item.SenderEmailAddress = "gonderenmail@gonderenalanadi.com" Then
        Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")      
     End If
        
  End If
ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Sayın Asri Hocam çok güzel çalışma ellerinize emeğinize sağlık Hocam müsaitseniz birşey sormak istiyorum. hocam bu mantıkla acaba gelen e mail içeriğini kriter belirliyerek excele çekilebilirmi. örnek 1. ktiter konu içeriğine göre 2 . ktiter .e malini gönderen kişi ile 3 . kriter ise tarih aralığı olarak çekilebilirmi.
Excel'e kritere göre mail almak ise bu farklı bir konu. Excel tarafından kod yazıp ilgili kriter ile mailler excele çekilebilir.
 
Katılım
19 Şubat 2007
Mesajlar
630
Excel Vers. ve Dili
Ofis 365 Tr- 64 Bit
Altın Üyelik Bitiş Tarihi
08-01-2024
Bilgi için çok teşekkür ederim. Hocam tekrar emeğinize ve ellerinize sağlık.
Saygılarımla,
İyi günler dilerim.
 
Katılım
17 Nisan 2009
Mesajlar
30
Excel Vers. ve Dili
MS OFFİCE 365
Merhaba Asri
https://www.excel.web.tr/threads/outlook-gelen-mail-icerik-filtreleme-vba.164230/post-1048136 linkte yer alan cevabında "Kırmızı alan mail belirleme ve Deneme klasörüne taşımayı belirler. " belirtmişsin ama kırmızı bir alan paylaştığın kod için de yok. Alttaki kırmızı işaretlediklerim den mi bahsediyorsun.

If TypeName(Item) = "MailItem" Then
Subject = Item.Subject
If Item.SenderEmailAddress = "gonderenmail@gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")
End If
 
Katılım
17 Nisan 2009
Mesajlar
30
Excel Vers. ve Dili
MS OFFİCE 365
Bu şekilde deneyiniz. Kırmızı alan mail belirleme ve Deneme klasörüne taşımayı belirler.

Kod:
Public olApp As Outlook.Application
Public objNS As Outlook.NameSpace
Public tasinacak As Boolean

Private WithEvents Items As Outlook.Items
 
Private Sub Application_Startup()
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  On Error GoTo ErrorHandler
  Dim Msg As Outlook.MailItem
  Dim Subject As String
 
  If TypeName(Item) = "MailItem" Then
     Subject = Item.Subject
     If Item.SenderEmailAddress = "gonderenmail@gonderenalanadi.com" Then
        Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")     
     End If
       
  End If
ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub
Paylaştığın bu kod da sadece bir mail adresi için düzenleme var.
her mail adresi için yeri makro yazmaktan ise bunu bir makro ile yapmak mümkün mü?

Örneğin kod içindeki satırları alttaki gibi güncellesem bir kod ile tüm işi yapabilir miyim?

If TypeName(Item) = "MailItem" Then
Subject = Item.Subject
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme1")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme2")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme3")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme4")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme5")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme6")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme7")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme8")

End If
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Merhaba Asri
https://www.excel.web.tr/threads/outlook-gelen-mail-icerik-filtreleme-vba.164230/post-1048136 linkte yer alan cevabında "Kırmızı alan mail belirleme ve Deneme klasörüne taşımayı belirler. " belirtmişsin ama kırmızı bir alan paylaştığın kod için de yok. Alttaki kırmızı işaretlediklerim den mi bahsediyorsun.

If TypeName(Item) = "MailItem" Then
Subject = Item.Subject
If Item.SenderEmailAddress = "gonderenmail@gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")
End If
Evet işaretli yer.
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Paylaştığın bu kod da sadece bir mail adresi için düzenleme var.
her mail adresi için yeri makro yazmaktan ise bunu bir makro ile yapmak mümkün mü?

Örneğin kod içindeki satırları alttaki gibi güncellesem bir kod ile tüm işi yapabilir miyim?

If TypeName(Item) = "MailItem" Then
Subject = Item.Subject
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme1")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme2")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme3")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme4")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme5")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme6")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme7")
If Item.SenderEmailAddress = "gonderenalanadi.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme8")

End If
Item.SenderEmailAddress bu değişkenin içerdiği mail adresinin de alan adını ayırıp ona göre karşılaştırma yapmanız gerekir.
Aşağıdaki şekilde deneyiniz. Kodu şimdi yazdım denemedim. Kontrol edersiniz.

mailalanadi=mid(Item.SenderEmailAddress,instr(Item.SenderEmailAddress,"@")+1,len(Item.SenderEmailAddress) )

If mailalanadi= "gonderenalanadi.com" Then
 
Katılım
17 Nisan 2009
Mesajlar
30
Excel Vers. ve Dili
MS OFFİCE 365
Item.SenderEmailAddress bu değişkenin içerdiği mail adresinin de alan adını ayırıp ona göre karşılaştırma yapmanız gerekir.
Aşağıdaki şekilde deneyiniz. Kodu şimdi yazdım denemedim. Kontrol edersiniz.

mailalanadi=mid(Item.SenderEmailAddress,instr(Item.SenderEmailAddress,"@")+1,len(Item.SenderEmailAddress) )

If mailalanadi= "gonderenalanadi.com" Then
If TypeName(Item) = "MailItem" Then
Subject = Item.Subject
mailalanadi=mid(Item.SenderEmailAddress,instr(Item.SenderEmailAddress,"@")+1,len(Item.SenderEmailAddress) )
If mailalanadi= "globalmatbaacilik.com.tr" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("GLOBALMATBAA")
If mailalanadi= "aktifisg.com.tr" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("AKTİF")
If mailalanadi= "albarkimya.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("ALBARKİMYA")
If mailalanadi= "atgidalab.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("AT_LAB")
If mailalanadi= "baharot.com.tr" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("BAHAROT")
If mailalanadi= "dunapack-packaging.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("DENTAŞ")
End If

Bu şekilde mi olmasını gerekli?
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
If TypeName(Item) = "MailItem" Then
Subject = Item.Subject
mailalanadi=mid(Item....
IF bloğunu bu şekilde deneyiniz.

C#:
If mailalanadi= "globalmatbaacilik.com.tr" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("GLOBALMATBAA")
elseIf mailalanadi= "aktifisg.com.tr" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("AKTİF")
elseIf mailalanadi= "albarkimya.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("ALBARKİMYA")
elseIf mailalanadi= "atgidalab.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("AT_LAB")
elseIf mailalanadi= "baharot.com.tr" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("BAHAROT")
elseIf mailalanadi= "dunapack-packaging.com" Then
Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("DENTAŞ")
End If
 
Katılım
17 Nisan 2009
Mesajlar
30
Excel Vers. ve Dili
MS OFFİCE 365
merhaba asriakdeniz
Hata da vermiyor çalışmıyor da her hangi bir tepki yok.
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Kodların arasına msgbox ekleyerek nereye kadar ilerlediğini yada kodların çalışıp çalışmadığını kontrol edin.
Outlook vba da her değişiklik yaptığınızda kaydedip, outlook u kapatıp açın.
 
Katılım
17 Nisan 2009
Mesajlar
30
Excel Vers. ve Dili
MS OFFİCE 365
merhaba ASRİ
olmadı.
Tam kod dizilimini paylaşabilir misin.
Her defasında outlook aç kapa yapıyorum.
Ama kodlar hata da vermiyor çalışmıyorda.
 
Katılım
24 Nisan 2005
Mesajlar
3,652
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Bu şekilde gmail.com dan gelen mailler için test edildi. Çalışıyor.

C++:
Public olApp As Outlook.Application
Public objNS As Outlook.NameSpace
Public tasinacak As Boolean
 
Private WithEvents Items As Outlook.Items
 
Private Sub Application_Startup()
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  On Error GoTo ErrorHandler
  Dim Msg As Outlook.MailItem
  Dim Subject As String
 
  If TypeName(Item) = "MailItem" Then
    mailalanadi = Mid(Item.SenderEmailAddress, InStr(Item.SenderEmailAddress, "@") + 1, Len(Item.SenderEmailAddress))
 
    If mailalanadi = "globalmatbaacilik.com.tr" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("GLOBALMATBAA")
    ElseIf mailalanadi = "aktifisg.com.tr" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("AKTİF")
    ElseIf mailalanadi = "albarkimya.com" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("ALBARKİMYA")
    ElseIf mailalanadi = "atgidalab.com" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("AT_LAB")
    ElseIf mailalanadi = "baharot.com.tr" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("BAHAROT")
    ElseIf mailalanadi = "dunapack-packaging.com" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("DENTAŞ")
    ElseIf mailalanadi = "gmail.com" Then
      Item.Move objNS.GetDefaultFolder(olFolderInbox).Folders("Deneme")
    End If
        
  End If
ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub
 
Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
@Asri bey konu eski ama yapmak istediğim
Outlook da "Bitenler" klasörüme düşen mailleri okundu yaparak "Arsiv" klasörüme excel makrosu ile taşımak istiyorum nasıl bir kod olmalı
 
Üst