2015-05-01 2 views
1

В настоящее время я использую Django Allauth и модифицированную версию Django Invitations (https://github.com/bee-keeper/django-invitations). Единственное, что добавлено, - это поле, для которого группа добавляет пользователя, и приложение отлично работает, когда используется Django 1.6.x. Я хотел бы перейти на Django 1.7.x или 1.8, но это как-то нарушает функцию отправки по электронной почте.Письма не будут отправляться после обновления с Django 1.6.x на Django> 1.7.x

Специфическая часть кода здесь:

'import datetime 

from django.db import models 
from django.utils.translation import ugettext_lazy as _ 
from django.utils import timezone 
from django.utils.crypto import get_random_string 
from django.utils.encoding import python_2_unicode_compatible 
from django.contrib.sites.models import Site 
from django.core.urlresolvers import reverse 

from allauth.account.adapter import DefaultAccountAdapter 
from allauth.account.adapter import get_adapter 

from .managers import InvitationManager 
from . import app_settings 
from . import signals 

...(other code) 

def send_invitation(self, request, **kwargs): 
    current_site = (kwargs['site'] if 'site' in kwargs 
        else Site.objects.get_current()) 
    invite_url = reverse('invitations:accept-invite', 
         args=[self.key]) 
    invite_url = request.build_absolute_uri(invite_url) 

    ctx = { 
     'invite_url': invite_url, 
     'current_site': current_site, 
     'email': self.email, 
     'key': self.key, 
    } 

    email_template = 'invitations/email/email_invite' 

    get_adapter().send_mail(email_template, 
          self.email, 
          ctx) 
    self.sent = timezone.now() 
    self.save() 
    signals.invite_url_sent.send(
     sender=self.__class__, 
     instance=self, 
     invite_url_sent=invite_url)' 

здесь (https://github.com/bee-keeper/django-invitations/blob/master/invitations/models.py)

Это также ссылается на код из allauth здесь:

from __future__ import unicode_literals import re 
import warnings 
import json 

from django.conf import settings 
from django.http import HttpResponse 
from django.template.loader import render_to_string 
from django.template import TemplateDoesNotExist 
from django.contrib.sites.models import Site 
from django.core.mail import EmailMultiAlternatives, EmailMessage 
from django.utils.translation import ugettext_lazy as _ 
from django import forms 
from django.contrib import messages 

try: 
    from django.utils.encoding import force_text 
except ImportError: 
    from django.utils.encoding import force_unicode as force_text 

from ..utils import (import_attribute, get_user_model, 
       generate_unique_username, 
       resolve_url) 

from . import app_settings 

USERNAME_REGEX = re.compile(r'^[\[email protected]+-]+$', re.UNICODE) 

........ (other code) 

def render_mail(self, template_prefix, email, context): 
    """ 
    Renders an e-mail to `email`. `template_prefix` identifies the 
    e-mail that is to be sent, e.g. "account/email/email_confirmation" 
    """ 
    subject = render_to_string('{0}_subject.txt'.format(template_prefix), 
           context) 
    # remove superfluous line breaks 
    subject = " ".join(subject.splitlines()).strip() 
    subject = self.format_email_subject(subject) 

    bodies = {} 
    for ext in ['html', 'txt']: 
     try: 
      template_name = '{0}_message.{1}'.format(template_prefix, ext) 
      bodies[ext] = render_to_string(template_name, 
              context).strip() 
     except TemplateDoesNotExist: 
      if ext == 'txt' and not bodies: 
       # We need at least one body 
       raise 
    if 'txt' in bodies: 
     msg = EmailMultiAlternatives(subject, 
            bodies['txt'], 
            settings.DEFAULT_FROM_EMAIL, 
            [email]) 
     if 'html' in bodies: 
      msg.attach_alternative(bodies['html'], 'text/html') 
    else: 
     msg = EmailMessage(subject, 
          bodies['html'], 
          settings.DEFAULT_FROM_EMAIL, 
          [email]) 
     msg.content_subtype = 'html' # Main content is now text/html 
    return msg 

def send_mail(self, template_prefix, email, context): 
    msg = self.render_mail(template_prefix, email, context) 
    msg.send()' 

найденную в (allauth/счет /adapter.py)

Форма всегда сохраняет пригласительные элементы t в базу данных, но ломается при отправке электронной почты. (вся информация хранится правильно, так что это не нарушает ее). Если электронное письмо удалено, все последующие коды выполняются нормально. Я даже попробовал просто отправить такое электронное письмо как таковое:

from django.core.mail import EmailMessage 
msg = EmailMessage("TEST", "HELLO", my_email, [some_email]) 
msg.send() 

но это тоже не отправляет электронные письма.

Я надеюсь, что это очень просто, но любая помощь будет оценена по достоинству.

+0

Вы видите ошибку? Какова ценность настройки [EMAIL_BACKEND] (https://docs.djangoproject.com/en/1.8/ref/settings/#email-backend)? – aumo

+0

Можете ли вы дать трассировку стека? – Conans

ответ

0

У меня была та же проблема, исполнение просто болтались при выполнении этого кода в Джанго оболочке (Django 1.7):

from django.core.mail import send_mail 
send_mail('Subject here', 'Here is the message.', '[email protected]', 
    ['[email protected]'], fail_silently=False) 

После Django docs on email settings я использовал в settings.py:

EMAIL_USE_TLS = False 
EMAIL_USE_SSL = True 
EMAIL_PORT = 465 

Это сработало.

Смежные вопросы