209 lines
5.3 KiB
Markdown
209 lines
5.3 KiB
Markdown
# 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
|
||
|