邮件不是通过django-contact-form应用发送的,也没有错误信息

问题描述:

我已经安装了这个django-contact-form应用。 当我想通过联系表格发送电子邮件到我的gmail帐户时,我没有收到任何错误,并且我被重定向到我的contact_form_sent.html,但没有邮件发送。任何人都可以帮助我调试此问题。这是一个SMTP服务器的问题,因为我从本地测试?邮件不是通过django-contact-form应用发送的,也没有错误信息

我的配置如下,它类似于Patrick Beeson's

settings.py 我已经检查其他电子邮件帐户及其appropiate端口。

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
     #('***', '***@googlemail.com'), 
) 

MANAGERS = ADMINS 

EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_PASSWORD = '********' 
EMAIL_HOST_USER = '******@googlemail.com' 
EMAIL_PORT = 587 #465 or 587 
#EMAIL_SUBJECT_PREFIX = 'Django Test mail' 
EMAIL_USE_TLS = True 

urls.py

(r'^contact/', include('contact_form.urls')), 

contact_form.html

... 
       <form method="POST"> 
       <ol> 
       {{ form.as_p }} 
       <li> 
      <input type="submit" name="submit" value={% trans "Senden" %} /> 
       <div class="clr"></div> 
       </li> 
       </ol> 
       </form> 
... 

contact_form.txt

{{ name }} 
{{ email }} 
{{ body }} 

contact_form_sent.html

{% block content %} 
      <h2>{% trans "Your message was sent." %}</h2> 
{% endblock %} 

contact_form_subject.txt

message from {{ name }} 

在我contact_form.html设置action="."并添加print request.POST我得到这个编辑后

我developm在本地主机服务器五官科后,点击提交按钮:

<QueryDict: {u'body': [u'This is my Test message for you !!\r\n\r\nBest Regards\r\nMr. NoOne'], u'name': [u'testname'], u'submit': [u'Send'], u'email': [u'[email protected] 
com']}> 

EDITED

如果我写我自己的view.py我得到这个错误:

Request Method:  POST 
Request URL: http://127.0.0.1:8000/en/contact/ 
Exception Type:  error 
Exception Value:  

(10065, 'No route to host') 

Exception Location:  C:\Python25\lib\smtplib.py in connect, line 310 
Python Executable: C:\Python25\python.exe 
Python Version:  2.5.0 
Python Path: ['H:\\webpage', 'C:\\WINDOWS\\system32\\python25.zip', 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win', 'C:\\Python25\\lib\\lib-tk', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages'] 

我的新自己views.py看起来像:

from django.conf import settings 
from django.http import HttpResponse 
from django.shortcuts import render_to_response 
from django.template import RequestContext 
from django.core.mail import send_mail 

from contact_form.forms import ContactForm 


def email_contact(request, form_class=ContactForm, template_name='contact_form/contact_form.html'): 
    form = form_class(data=request.POST, files=request.FILES, request=request) 
    if request.method == "POST": 
     send_mail('Subject here', 'Here is the message.', '[email protected]', ['[email protected]'], fail_silently=False) 
     print request.POST 
    return render_to_response(template_name, { 'form': form }, context_instance=RequestContext(request)) 

这是怎么回事错在这里?

你确定表单甚至提交?因为如果你使用debug true提交表单,并且表单中没有csrf标记,Django应该给出错误。另一个想法;您正在与smtp.gmail.com交谈,但使用@ googlemail.com地址。你确定应付?

编辑

我做了这个不同的;而不是使用现有的应用程序,我建立一个新的。我的应用需要做的不仅仅是邮寄。它只有两个文件,所以这应该有所帮助。我使用Gmail,也另外再加:)我给你相关的代码,但切一块块的,所以看是什么;)

settings.py:

from local import localsettings 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    ('Jasper Kennis', '[email protected]'), 
) 

MANAGERS = ADMINS 

DATABASES = { 
    'default': { 
     'ENGINE': localsettings.db_engine, 
     'NAME': localsettings.db_name, 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': '', 
     'PORT': '', 
    } 
} 

SITE_ID = 1 

# If you set this to False, Django will make some optimizations so as not 
# to load the internationalization machinery. 
USE_I18N = True 

# If you set this to False, Django will not format dates, numbers and 
# calendars according to the current locale 
USE_L10N = True 

# Make this unique, and don't share it with anybody. 
SECRET_KEY = '###' 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 


INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.admin', 
     'therelevantapp', 
) 


EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '###@gmail.com' 
EMAIL_HOST_PASSWORD = '###' 
EMAIL_PORT = 587 

和应用程序,应用程序/意见.py

import os 
import os.path 
import string 
from random import choice 

from app.models import * 
from TitelGenerator.TitelGenerator import TitelGenerator 
from django import forms 
from django.conf import settings 
from django.http import HttpResponse 
from django.shortcuts import render_to_response 
from django.template import RequestContext 
from django.core.mail import send_mail 
from django.core.mail import EmailMultiAlternatives 



def klaar(request): 
    if request.method == "POST": 
     title = 'Je inschrijving is voltooid!' 
     message = 'a whole message' 
     send_mail(title , message , 'sendermail' , 'receivermail' ,  fail_silently=False) 

     return render_to_response('klaar.html' , { 'titel': kind.id, 'request':  request.FILES }, context_instance = RequestContext(request)) 

请注意,您确实需要在表单中包含{%csrf_token%}。在这种情况下,您必须创建表单模板。让我知道这是否有帮助。

+0

我已经用smtp.googlemail.com测试过它,但仍然是同样的问题。有什么方法可以调试吗? – saeed 2011-01-06 13:07:49

确保您的管理员,在你的settings.py经理设置可用,因为它找谁这些电子邮件

在CONTACT_FORM的forms.py

class BaseEmailFormMixin(object): 
    from_email = settings.DEFAULT_FROM_EMAIL 
    recipient_list = [email for _, email in settings.MANAGERS] 
再次

确保您设置电子邮件端口主机设置在你的settings.py

EMAIL_HOST = 'yourmailserver' 
EMAIL_PORT = "587" 
EMAIL_HOST_USER = '' 
EMAIL_HOST_PASSWORD = '' 
EMAIL_USE_TLS = True