Отправить письмо, когда пользователь создает каталог - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть приложение для управления файлами, и я хочу, чтобы некоторые конкретные пользователи-администраторы получали уведомление, когда "baseusers" создают каталоги. Письма отправляются пользователям, указанным на страницах администратора. Оптимальным решением было бы установить флажок на страницах моего профиля для получения уведомлений, но я бы хотел, чтобы это сначала сработало. Вот мое простое решение:

from django.core.mail import send_mail, BadHeaderError
from basedraft.sendmail.views import send_email
from django.core.signals import request_finished

@permission_required('fileman.can_fm_add')
def createDir(request, path=None):
    if path is None:
        return HttpResponse(_(u"Path does not set."))
    try:
        path = toString(path)
        os.mkdir(path)

    except Exception, msg:
        return raise_error(request, [str(msg)])
    createHistory(request.user, "createdir", toString(path))    # Added this to history, added createdir to models

    # Send mail to recipients when a directory is created
    send_email(toString(path))

    return HttpResponseRedirect('/fm/list/%s' % path)

Проблема здесь в том, что сайт зависает, пока не будет отправлено письмо. Я пытался использовать сигналы так:


from django.core.mail import send_mail, BadHeaderError
from basedraft.sendmail.views import send_email
from django.core.signals import request_finished

@permission_required('fileman.can_fm_add')
def createDir(request, path=None):
    if path is None:
        return HttpResponse(_(u"Path does not set."))
    try:
        path = toString(path)
        os.mkdir(path)

    except Exception, msg:
        return raise_error(request, [str(msg)])
    createHistory(request.user, "createdir", toString(path))    # Added this to history, added createdir to models

    # Send mail to recipients when a directory is created
    #send_email(toString(path))
    request_finished.connect(mail_callback)
    return HttpResponseRedirect('/fm/list/%s' % path)


def mail_callback(sender, **kwargs):
    #path = setPath
    send_email('test')

Но это только начало отправлять много писем для каждого законченного запроса. Любые идеи, как мне это сделать, если есть способ, чтобы сайт не зависал, но отправка электронной почты осуществляется в фоновом режиме?

1 Ответ

2 голосов
/ 21 апреля 2011

Для отправки и обработки писем в фоновом режиме вы должны использовать почтовую очередь .

В этой теме обсуждается несколько вариантов: Советы по Python / Django и очередям сообщений

Для вашего случая использования django-mailer кажется хорошим выбором.

...