# Contact Form - Email Gönderimi (Celery)

## Yapılan Değişiklikler

### 1. Contact Model Güncellemeleri
- `user` alanı artık `null=True, blank=True` (anonim kullanıcılar da form gönderebilir)
- `ip` alanı artık `null=True, blank=True` (opsiyonel)
- `on_delete=SET_NULL` olarak değiştirildi

### 2. Yeni Dosyalar
- **contact/tasks.py**: Celery task ile email gönderimi
- **core/celery.py**: Celery yapılandırması
- **core/__init__.py**: Celery app otomatik yükleme
- **test_contact_api.py**: API test scripti

### 3. View Güncellemeleri (contact/views.py)
- `permission_classes = [AllowAny]` - Herkes form gönderebilir
- IP adresi otomatik olarak algılanır
- Kullanıcı giriş yapmışsa user kaydedilir, yoksa None
- Contact kaydedildikten sonra Celery task ile email gönderilir

### 4. Serializer Güncellemeleri
- Gereksiz alanlar kaldırıldı (ip, updated_at)
- Sadece gerekli alanlar kabul edilir

## Kurulum ve Çalıştırma

### 1. Migration Uygula (TAMAMLANDI ✅)
```bash
python manage.py makemigrations contact
python manage.py migrate contact
```

### 2. Redis'in Çalıştığından Emin Olun
Celery için Redis broker gerekli. Settings'te tanımlı:
```
CELERY_BROKER_URL = redis://default:1923btO**@10.80.80.70:6379/5
```

### 3. MailPit'in Çalıştığından Emin Olun
Email testleri için MailPit kullanılıyor:
- SMTP: localhost:1025
- Web UI: http://localhost:8025

MailPit başlatma (Docker):
```bash
docker run -d -p 1025:1025 -p 8025:8025 --name mailpit axllent/mailpit
```

### 4. Celery Worker Başlat
Yeni bir terminal açın ve şu komutu çalıştırın:
```bash
cd /Users/beyhan/Desktop/Projeler/Python/atabackend
source venv/bin/activate
celery -A core worker --loglevel=info
```

### 5. Django Sunucusunu Başlat
Başka bir terminal açın:
```bash
cd /Users/beyhan/Desktop/Projeler/Python/atabackend
source venv/bin/activate
python manage.py runserver
```

### 6. Test Et
```bash
# Terminal'de test script'i çalıştır
python test_contact_api.py

# Veya cURL ile
curl -X POST http://127.0.0.1:8000/api/v1/contact/create/ \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Test Kullanıcı",
    "email": "test@example.com",
    "subject": "Test Konusu",
    "message": "Bu bir test mesajıdır."
  }'
```

### 7. Email Kontrolü
- MailPit web arayüzüne gidin: http://localhost:8025
- Gönderilen emaili göreceksiniz

## API Endpoint

**URL**: `POST /api/v1/contact/create/`

**Permission**: AllowAny (Kimlik doğrulama gerekmez)

**Request Body**:
```json
{
  "name": "Adınız Soyadınız",
  "email": "email@example.com",
  "subject": "Konu",
  "message": "Mesajınız"
}
```

**Response** (201 Created):
```json
{
  "id": 1,
  "name": "Adınız Soyadınız",
  "email": "email@example.com",
  "subject": "Konu",
  "message": "Mesajınız",
  "created_at": "2026-01-15T10:30:00Z"
}
```

## Celery Task İzleme

### Task Logları
Celery worker terminalinde task durumunu görebilirsiniz:
```
[2026-01-15 10:30:00,123: INFO/MainProcess] Task contact.tasks.send_contact_email[...] received
[2026-01-15 10:30:00,456: INFO/ForkPoolWorker-1] Task contact.tasks.send_contact_email[...] succeeded
```

### Django Admin'den İzleme
Celery Beat ve Results kurulu, admin panelden task sonuçlarını görebilirsiniz:
- http://127.0.0.1:8000/admin/django_celery_results/

## Email Şablonu

Gönderilen email formatı:
```
Konu: Yeni İletişim Mesajı: [KONU]

Yeni bir iletişim mesajı alındı!

Gönderen: [AD SOYAD]
Email: [EMAIL]
IP Adresi: [IP]

Konu: [KONU]

Mesaj:
[MESAJ İÇERİĞİ]

---
Bu mesaj otomatik olarak gönderilmiştir.
```

## Production Ayarları

Production'da şunları yapın:

1. **Email Backend'i değiştir** (settings.py):
```python
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'  # veya kendi SMTP sunucunuz
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-email@gmail.com'
EMAIL_HOST_PASSWORD = 'your-app-password'
DEFAULT_FROM_EMAIL = 'noreply@denizogur.com.tr'
```

2. **Alıcı email adresini değiştir** (contact/tasks.py):
```python
recipient_list=['info@denizogur.com.tr']  # Production email
```

3. **Redis production URL'i kullan**
4. **Celery worker'ı production'da service olarak çalıştır**

## Sorun Giderme

### Email Gönderilmiyor
1. Celery worker çalışıyor mu? → Terminal'i kontrol edin
2. Redis bağlantısı var mı? → `CELERY_BROKER_URL` kontrol edin
3. MailPit çalışıyor mu? → http://localhost:8025 kontrol edin

### Task Çalışmıyor
```bash
# Celery task'ı manuel test et
python manage.py shell
>>> from contact.tasks import send_contact_email
>>> send_contact_email.delay('Test', 'test@test.com', 'Konu', 'Mesaj', '127.0.0.1')
```

### Celery Worker Hatası
```bash
# Celery worker'ı yeniden başlat
# Worker terminalinde Ctrl+C
# Sonra tekrar başlat:
celery -A core worker --loglevel=info
```

## İleride Eklenebilecek Özellikler

1. **Email Template (HTML)**: Rich HTML email şablonu
2. **Auto-reply**: Kullanıcıya otomatik teşekkür emaili
3. **Rate Limiting**: Spam koruması için rate limiting
4. **File Upload**: Contact formuna dosya ekleme
5. **Admin Notifications**: Yeni mesaj geldiğinde admin bildirim
6. **Email Queue Retry**: Email başarısız olursa yeniden deneme

## Referanslar

- Celery Docs: https://docs.celeryq.dev/
- Django Celery Results: https://django-celery-results.readthedocs.io/
- MailPit: https://github.com/axllent/mailpit

