почта не отправляется приложением django-contact-form и сообщения об ошибке нет - PullRequest
1 голос
/ 06 января 2011

Я установил это django-contact-form приложение. Когда я хочу отправить электронное письмо на свою учетную запись gmail через контактную форму, я не получаю сообщение об ошибке, и меня перенаправляют на мой contact_form_sent.html , но письмо не отправляется. Может ли кто-нибудь помочь мне в устранении этой проблемы. Это проблема сервера SMTP, потому что я тестирую с локального хоста ???

Мои конфигурации следующие, это похоже на Патрика Бизона :

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

при установке action="." в моем contact_form.html и добавлении 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))

Что здесь не так?

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

убедитесь, что ваши настройки ADMIN, MANAGERS в файле settings.py доступны, потому что он ищет эти письма

в forms.py для contact_form

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
0 голосов
/ 06 января 2011

Вы уверены, что форма даже отправляет?Потому что, если вы отправляете форму с параметром debug 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 / 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%} внутри формы.Шаблон формы вам придется создать самостоятельно в этом случае.Дайте мне знать, если это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...