Джанго отправка электронной почты - PullRequest
4 голосов
/ 26 декабря 2009

В PHP я могу отправить электронное письмо, просто позвонив mail(). В Django мне нужно указать SMTP-серверы и другие вещи.

Есть ли более простой способ отправки электронной почты от Django?

Ответы [ 3 ]

3 голосов
/ 26 декабря 2009

В модуле django.core.mail есть несколько хороших функций отправки почты.

Учебное пособие см. Отправка электронной почты :

Хотя Python делает отправку электронной почты относительно легко через smtplib библиотека, Django предоставляет пару легкие обертки по этому. Эти обертки предоставляются для отправки электронной почты очень быстро, чтобы облегчить тестирование отправка электронной почты во время разработки и обеспечить поддержку платформ, которые не могу использовать SMTP.

Простейшая функция, которая скорее всего подойдет вашим целям, - это send_mail функция:

send_mail(
    subject, 
    message, 
    from_email, 
    recipient_list, 
    fail_silently=False, 
    auth_user=None, 
    auth_password=None, 
    connection=None)
2 голосов
/ 26 декабря 2009

В PHP вы можете отправлять почту только с помощью простой команды mail () в системах, отличных от Windows. Ожидается, что локальный MTA, такой как Postfix, будет установлен и правильно настроен, как это должно быть в случае большинства веб-серверов. Если вы хотите зависеть от сторонней или децентрализованной почтовой службы, зависит от того, насколько важна электронная почта для вашего приложения. Серьезная зависимость от быстрой и надежной передачи электронной почты обычно приводит к отправке почты через SMTP на центральный почтовый сервер («большой канал»).

Тем не менее, если вы хотите использовать ту же функцию, что и в PHP, попробуйте следующее:

import subprocess

def send_mail(from_addr, to_addr, subject, body):
  cmdline = ["/usr/sbin/sendmail", "-f"]
  cmdline.append(from_addr)
  cmdline.append(to_addr)
  mailer = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
  dialog = "From: %s\nTo: %s\nSubject: %s\n\n%s\n.\n" % (from_addr, to_addr, subject, body)
  return mailer.communicate(dialog)

И используйте это как: send_mail ("Me <myself@mydomain.com>", "Recip Ient <other@hisdomain.com>", "Teh' Subject", "Mail body")

0 голосов
/ 27 ноября 2010

В любом случае, вам нужен некоторый бэкэнд (читай MTA). Из головы я могу думать о двух вещах:

  1. Как уже указывалось, вы можете, например, использовать sendmail http://djangosnippets.org/snippets/1864/
  2. Еще лучше использовать Python MTA. Есть Lamson, почтовый сервер Python (MTA): http://lamsonproject.org/docs/hooking_into_django.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...