Files
shopback/CONTACT_EMAIL_SETUP.md
Beyhan Oğur d9f1ea341e first commit
2026-04-26 22:27:56 +03:00

209 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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