2009-03-03 24 views
12

Używam serwera SMTP Gmaila do wysyłania wiadomości e-mail od użytkowników mojej witryny.Django email

Są to ustawienia domyślne w moim settings.py

EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'pwd' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 
SERVER_EMAIL = EMAIL_HOST_USER 
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER 

Jeśli chcę użytkownikowi wysłać e-mail, jestem nadpisanie tych ustawień i wysyłania wiadomości e-mail przy użyciu metody wysyłania Django. Gdy wystąpi wyjątek w systemie, otrzymuję wiadomość e-mail z adresu [email protected] Czasami otrzymuję wiadomość e-mail od zalogowanego użytkownika. Co może również oznaczać, że gdy użytkownik otrzyma wiadomość e-mail wysłaną z mojej witryny, ma wysłany adres inny niż rzeczywisty użytkownik.

Co należy zrobić, aby uniknąć takiej sytuacji?

Odpowiedz

22

Django używa tylko settings.DEFAULT_FROM_EMAIL gdy którykolwiek z poczty wysyłającego funkcje przejść None lub pusty ciąg znaków jako adres nadawcy. Można to sprawdzić pod numerem django/core/mail.py.

Gdy jest nieobsługiwany wyjątek Django wywołuje funkcję mail_admins() w django/core/mail.py który zawsze używa settings.SERVER_EMAIL i jest tylko wysłane na adresy wymienione w settings.ADMINS. Można to również sprawdzić w django/core/mail.py.

Jedynym miejscem Django wysyła e-maili jest jeśli settings.SEND_BROKEN_LINK_EMAILS prawda, to CommonMiddleware wyśle ​​wiadomość do wszystkich adresów podanych w settings.MANAGERS i nadawcy e-mail jest settings.SERVER_EMAIL.

W związku z tym, jedyny przypadek, w którym zwykły użytkownik otrzyma wiadomość e-mail z witryny, jest dostępny pod numerem send_mail(). Dlatego zawsze podawaj prawdziwy adres jako argument from_mail, a unikniesz użytkowników otrzymujących wiadomości e-mail z ustawień settings.SERVER_EMAIL lub settings.DEFAULT_FROM_EMAIL.

marginesie: django rejestracji jest co najmniej jeden z przykładów Pluggable Django, który będzie wysyłał wiadomości z settings.DEFAULT_FROM_EMAIL więc w takich przypadkach trzeba się upewnić, że jest to właściwy adres e-mail, takie jak wsparcie @ yoursite.com lub [email protected]

+0

Dzięki za pomoc. –