Gelen kutunuzdaki mailleri otomatik olarak okuyup kategorize eden (İş, Pazarlama, Sosyal Medya, Şüpheli/Phishing vb.) ve sonuçları bir Google Sheet'e satır olarak ekleyen, tamamen otonom bir otomasyon.
- 🕐 Her 5 dakikada bir arka planda otomatik çalışır (launchd / cron / Task Scheduler)
- 🔴 Şüpheli/phishing belirtisi taşıyan mailleri sheet'te kırmızı renkle işaretler
- 🔒 Şifre/OTP/kart numarası gibi hassas verileri asla sheet'e kopyalamaz
- 📅 Yeni mailler eklendikçe sheet otomatik olarak tarihe göre sıralı kalır
- 🔄 Artımlı senkronizasyon — her çalıştırmada sadece yeni mailler işlenir, hiçbir şey tekrarlanmaz
[Gmail] --(Gmail API)--> [Python betiği] --(Sheets API)--> [Google Sheet]
^
|
[launchd: her 5 dakikada bir tetikler]
- Betik,
state.jsondosyasındaki son çalışma zamanından sonra gelen mailleri Gmail API üzerinden çeker (artımlı/incremental senkronizasyon). - Her maili anahtar kelime tabanlı kurallarla kategorize eder ve şüpheli/phishing göstergelerine (aciliyet dili, domain uyuşmazlığı, tehlikeli ek, kısaltılmış link vb.) karşı kontrol eder.
- Sonuçları Google Sheets API ile sheet'e ekler, şüpheli satırları koşullu biçimlendirme ile kırmızı işaretler, veriyi tarihe göre yeniden sıralar.
- Python 3.9 veya üstü kurulu olmalı. Kontrol et:
Yoksa: macOS'ta
python3 --version
brew install python, Windows'ta python.org'dan indir (kurulumda "Add Python to PATH" kutusunu işaretlemeyi unutma), Linux'ta genelde zaten kurulu gelir (sudo apt install python3 python3-venvgerekebilir). - Bir Google hesabı (kişisel Gmail).
- console.cloud.google.com → yeni proje oluştur
- APIs & Services → Library →
Gmail APIveGoogle Sheets API'yi ayrı ayrı Enable et - APIs & Services → Google Auth Platform → Audience:
- User type: External
- Test users kısmına kendi Gmail adresini ekle
- APIs & Services → Google Auth Platform → Clients → Create Client:
- Application type: Desktop app
credentials.json'ı indir, proje klasörüne koy
⚠️ Önemli: Proje "Testing" modunda kaldığı sürece Google, verilen izni 7 gün sonra otomatik geçersiz kılar. Bot durursa (invalid_granthatası),token.json'ı silip betiği bir kez daha elle çalıştırman yeterli — bkz. Sorun Giderme.
Boş bir Google Sheet oluştur, URL'sindeki uzun ID'yi kopyala:
https://docs.google.com/spreadsheets/d/BU_KISIM_SHEET_ID/edit
cp config.example.json config.jsonconfig.json içindeki spreadsheet_id alanına kendi Sheet ID'ni yaz.
macOS / Linux:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtWindows (PowerShell):
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txtpython gmail_kategori_bot.pyTarayıcı açılır, Google hesabınla giriş yapıp izin verirsin. Bu,
token.json dosyasını oluşturur — bundan sonra tarayıcı açılmadan
sessizce çalışır.
⚠️ İlk çalıştırmada Google "Bu uygulama doğrulanmadı" uyarısı gösterebilir (normal — bu kişisel/tek kullanıcılı bir proje). "Gelişmiş" (Advanced) → "[proje adı]'a git (güvenli değil)" diyerek devam et.
macOS (launchd):
cp com.example.gmailkategoribot.plist.template ~/Library/LaunchAgents/com.example.gmailkategoribot.plistKopyaladığın dosyadaki /path/to/gmail_bot yollarını kendi gerçek
klasör yoluna göre düzenle (pwd komutuyla öğrenebilirsin), sonra:
launchctl load ~/Library/LaunchAgents/com.example.gmailkategoribot.plistKontrol için:
launchctl list | grep gmailkategoribot
cat gmail_bot.logWindows (Task Scheduler):
- Başlat → "Görev Zamanlayıcı" (Task Scheduler) → Temel Görev Oluştur
- Tetikleyici: Daily, saat: istediğin saat
- Eylem: Start a program → Program:
venv\Scripts\python.exe'in tam yolu (where pythonile venv aktifken bulabilirsin) → Argümanlar:gmail_kategori_bot.py'ın tam yolu → "Start in": proje klasörü - Daha sık çalıştırmak istersen (örn. 5 dakikada bir), oluşturduğun görevi aç → Triggers → Edit → "Repeat task every" kutusunu işaretleyip 5 dakika seç
Linux (cron):
crontab -eşu satırı ekle (yolları kendine göre düzenle):
*/5 * * * * /path/to/gmail_bot/venv/bin/python3 /path/to/gmail_bot/gmail_kategori_bot.py >> /path/to/gmail_bot/cron.log 2>&1
| Kategori | Belirleme kriteri |
|---|---|
| İş | Toplantı/proje/rapor içeren mailler |
| Finans/Fatura | Fatura, ödeme, ekstre içeren mailler |
| Alışveriş/Kargo | Sipariş onayı, kargo takip |
| Sosyal Medya | LinkedIn, Pinterest, Instagram vb. platform bildirimleri |
| Bildirim/Otomatik | no-reply gönderenler, güvenlik/doğrulama bildirimleri |
| Pazarlama/Reklam | İndirim, kampanya, bülten |
| Abonelik/Üyelik | Üyelik yenileme hatırlatmaları |
| Şüpheli/Phishing Adayı | Domain uyuşmazlığı + aciliyet dili/kimlik bilgisi talebi |
| Diğer/Kontrol Edilmeli | Yukarıdakilerden hiçbirine uymayan |
Kuralları gmail_kategori_bot.py dosyasının başındaki anahtar kelime
listelerinden (FINANCE_KEYWORDS, MARKETING_KEYWORDS vb.)
özelleştirebilirsin.
| Hata | Sebep | Çözüm |
|---|---|---|
403 access_denied |
Google hesabın test users listesine eklenmemiş | Google Auth Platform → Audience → Test users |
invalid_grant / token expired |
Testing modunda 7 gün sınırı doldu | rm token.json sonra betiği tekrar çalıştır |
Unable to find the server at ...googleapis.com |
Geçici internet/DNS sorunu | Bağlantıyı kontrol et, tekrar dene |
Unable to parse range |
Sheet sekme adı yanlış | Kod artık sekme adını otomatik buluyor, sorun olmamalı |
externally-managed-environment (pip) |
macOS sistem Python'u korumalı | venv kullan (yukarıdaki adım 4) |
- Bot hiçbir maili silmez, arşivlemez, yanıtlamaz — sadece okur.
- Şifre/OTP/kart numarası gibi veriler sheet'e asla ham haliyle
yazılmaz,
[GİZLENDİ]ile maskelenir. - Gmail için sadece okuma (readonly) izni istenir, yazma/silme izni istenmez.
credentials.json,token.json,config.jsondosyaları.gitignoreile hariç tutulmuştur — bunları asla paylaşmayın veya commit etmeyin.
