2014-11-16 2 views
1

서문 : 내 서버의 명령 줄 (send_mail() 사용)을 통해 전자 메일을 보낼 수 있습니다. 같은 SMTP 설정을 사용하여 localhost에서 이메일을 보낼 수도 있습니다. 또한 사용자 등록을 위해 django-allauth을 사용하고 있으며 이메일 확인 이메일을 보낼 수 있습니다.Django 문의 양식을 통해 전자 메일을 보낼 수 없습니다.

문제점 : 내 서버에서 내 연락처 양식으로 메일을 보내지 않았으므로 오류가 발생하지 않습니다. 사실 send_mail()1 (즉, 성공)을 반환하며보기가 리디렉션 중입니다.

class ContactFormView(FormView): 

    form_class = ContactForm 
    template_name = 'contact.html' 
    success_url = '/message-sent/' 

    def form_valid(self, form): 
     subject = form.cleaned_data.get('subject') 
     message = "{name}/{email} sent you the following message: ".format(
      name=form.cleaned_data.get('name'), 
      email=form.cleaned_data.get('email') 
     ) 
     message += "\n\n{0}".format(form.cleaned_data.get('message')) 
     sender = form.cleaned_data.get('email') 
     recipients = ['[email protected]', '[email protected]'] 
     honeypot = form.cleaned_data.get('phone_number') 

     if not honeypot: 
      send_mail(subject, message, sender, recipients) 
     return HttpResponseRedirect(self.get_success_url()) 

그리고 내 관련 forms.py을 : 슈퍼 명백한

class ContactForm(forms.Form): 
    phone_number = forms.CharField(required=False, label='Phone Number (keep this empty, or the form won\'t submit)') # honeypot 
    name = forms.CharField(required=True) 
    email = forms.EmailField(required=True) 
    subject = forms.CharField(required=True) 
    message = forms.CharField(widget=forms.Textarea) 

내가 실종 뭔가

views.py은 다음과 같습니다?

EDIT : 자격 증명이 확실히 작동합니다 (언급 한대로 내 지역 개발 환경에서 작동하며 동일한 자격 증명을 사용하여 서버의 셸에서 전자 메일을 보낼 수도 있음). fail_silently=False을 설정해도 예외는 발생하지 않습니다.

EDIT_2 : 나는 다음과 같이 할 수있는보기 수정 :

def form_valid(self, form): 
    send_mail('Test Subject', 'Test Message', '[email protected]', ['[email protected]']) 
    return HttpResponseRedirect(self.get_success_url()) 

를 그리고 잘 이메일을 받았다. 보시다시피 위의보기에서 양식 데이터가 send_mail()으로 전달되지 않았습니다.

+0

혹시 smtp 연결 유형에서'dummy'를 사용하고 계십니까? – karthikr

+0

아니요! 기본 'EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'' 사용하기 – rnevius

+0

smtp 자격 증명을 사용하여 이메일을 성공적으로 보낼 수 있었습니까? 또한 send_mail에 fail_silently 옵션이 있습니다 - https://docs.djangoproject.com/en/dev/topics/email/#send-mail - 예외가 있습니까? – karthikr

답변

1

는 Aaaand ... 디버깅의 제 4 시간 소스 내 허니팟으로 밝혀졌다. 특히, 허니팟에서 브라우저가 자동으로 채워집니다. 나는 자동 완성 내 VM의 브라우저에서 활성화되어 있지 않기 때문에

나는 내 로컬 환경에서 문제를보고하지 않았다. 그러나 내 호스트 시스템의 기본 브라우저를 사용하여 스테이징/프로덕션 서버에서 테스트하면 honeypot (화면에서 5000px)이 채워집니다.

이 답변은 앞으로 유사한 문제가 발생한 사용자를위한 것입니다.

당신이 허니팟을 사용하고, 양식은 이메일을 전송하지 않으면 해제 자동 완성! 또한 허니팟을 화면에 표시하는 것은 일반 사용자가 채울 수 있음을 나타냅니다. 실제로 JS로 숨기는 것이 좋습니다.

관련 문제