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

5.3 KiB
Raw Permalink Blame History

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 )

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:

MailPit başlatma (Docker):

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:

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:

cd /Users/beyhan/Desktop/Projeler/Python/atabackend
source venv/bin/activate
python manage.py runserver

6. Test Et

# 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ü

API Endpoint

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

Permission: AllowAny (Kimlik doğrulama gerekmez)

Request Body:

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

Response (201 Created):

{
  "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:

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):
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'
  1. Alıcı email adresini değiştir (contact/tasks.py):
recipient_list=['info@denizogur.com.tr']  # Production email
  1. Redis production URL'i kullan
  2. 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

# 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ı

# 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