first commit
This commit is contained in:
208
CONTACT_EMAIL_SETUP.md
Normal file
208
CONTACT_EMAIL_SETUP.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user