我已经安装了这个django-contact-form应用。 当我想通过联系表单向我的Gmail帐户发送电子邮件时,我没有收到任何错误,我被重定向到我的 contact_form_sent.html ,但没有发送邮件。任何人都可以帮我调试这个问题。这是smtp服务器的问题,因为我正在测试localhost ???
我的配置如下,类似于Patrick Beeson's:
settings.py 我已经检查了其他电子邮件帐户及其适当的端口。
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 }}
EDITED
在 contact_form.html 中设置action="."
并添加print request.POST
时,点击提交按钮后,我会在localhost的开发服务器中获取此信息:
<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'anyone@myemail.
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.', 'from@example.com', ['to@example.com'], fail_silently=False)
print request.POST
return render_to_response(template_name, { 'form': form }, context_instance=RequestContext(request))
这里出了什么问题?
答案 0 :(得分:0)
你确定表格甚至提交了吗?因为如果你提交一个调试为true的表单,并且表单中没有csrf标记,Django应该给出错误。另一个想法;你正在和smtp.gmail.com交谈,但使用@ googlemail.com地址。你确定应对吗?
修改
我做的与众不同;而不是使用现有的应用程序,我建立一个新的。我的应用程序需要做的不仅仅是邮寄。它只有两个文件,所以应该有所帮助。我也使用了gmail,另外加了:)我会给你相关的代码,但是切断了和平,所以请注意;)
settings.py:
from local import localsettings
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
('Jasper Kennis', 'jasper.kennis@companymail.nl'),
)
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
和app,app / views.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%}。在这种情况下,您必须自己构建的表单模板。如果这有帮助,请告诉我。
答案 1 :(得分:0)
确保您的settings.py中的ADMIN,MANAGERS设置可用,因为它正在查找这些电子邮件
<_>在contact_form的forms.py中class BaseEmailFormMixin(object):
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = [email for _, email in settings.MANAGERS]
再次确保在yout settings.py
中设置电子邮件端口主机设置EMAIL_HOST = 'yourmailserver'
EMAIL_PORT = "587"
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True