2015-01-14 8 views
1

Ух, я пробовал столько способов, что я смог найти онлайн до сих пор, но безрезультатно. Моя основная задача - отправить электронную почту с веб-приложения на основе django в частной локальной сети. Мне все равно, как это происходит ... smtp или win32com и перспективы ... что-то, пока это работает.Отправка электронной почты через django на окнах

Использование параметров Джанго по умолчанию, и этот код в Джанго оболочки:

from django.core.mail import send_mail 
send_mail('subject','message','[email protected]',['[email protected]']) 

Я получаю эту ошибку:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Python27_32\lib\site-packages\django\core\mail\__init__.py", line 50, in send_mail 
     connection=connection).send() 
    File "C:\Python27_32\lib\site-packages\django\core\mail\message.py", line 274, in send 
     return self.get_connection(fail_silently).send_messages([self]) 
    File "C:\Python27_32\lib\site-packages\django\core\mail\backends\smtp.py", line 87, in send_messages 
     new_conn_created = self.open() 
    File "C:\Python27_32\lib\site-packages\django\core\mail\backends\smtp.py", line 48, in open 
     local_hostname=DNS_NAME.get_fqdn()) 
    File "C:\Python27_32\lib\smtplib.py", line 250, in __init__ 
     (code, msg) = self.connect(host, port) 
    File "C:\Python27_32\lib\smtplib.py", line 311, in connect 
     (code, msg) = self.getreply() 
    File "C:\Python27_32\lib\smtplib.py", line 359, in getreply 
     + str(e)) 
SMTPServerDisconected: Connection unexpectedly closed: [Errno 10057] A request to send or 
receive data was disallowed because the socket is not connected and (when sending on a 
datagram socket using a sendto call) no address was supplied 

После копания в коде, я вставил оператор печати в smtplib, показывающий адрес ('localhost', 25). Поэтому я не знаю, почему он говорит, что адрес не был доставлен. Вот когда я обнаружил django-smtp-ssl.py и после установки добавлены следующие мои настройки:

EMAIL_USE_TLS = True #also tried 1 
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' 
EMAIL_HOST = 'localhost' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'mypassword' 
EMAIL_PORT = 465 

Затем выполняет один и тот же код, теперь я получаю:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Python27_32\lib\site-packages\django\core\mail\__init__.py", line 50, in send_mail 
     connection=connection).send() 
    File "C:\Python27_32\lib\site-packages\django\core\mail\message.py", line 274, in send 
     return self.get_connection(fail_silently).send_messages([self]) 
    File "C:\Python27_32\lib\site-packages\django\core\mail\backends\smtp.py", line 87, in send_messages 
     new_conn_created = self.open() 
    File "C:\Python27_32\lib\site-packages\django_smtp_ssl.py", line 12, in open 
     local_hostname=DNS_NAME.getfqdn()) 
    File "C:\Python27_32\lib\smtplib.py", line 777, in __init__ 
     SMTP.__init__(self, host, port, local_hostname, timeout) 
    File "C:\Python27_32\lib\smtplib.py", line 250, in __init__ 
     (code, msg) = self.connect(host, port) 
    File "C:\Python27_32\lib\smtplib.py", line 311, in connect 
     (code, msg) = self.getreply() 
    File "C:\Python27_32\lib\smtplib.py", line 355, in getreply 
     line = self.file.readline() 
    File "C:\Python27_32\lib\smtplib.py", line 186, in readline 
     chr = self.sslobj.read(1) 
    File "C:\Python27_32\lib\ssl.py", line 160, in read 
     return self._sslobj.read(len) 
AttributeError: 'NoneType' object has no attribute 'read' 

Я дополнительно попытался отправки почты через Outlook, и win32com в производственная среда с использованием Apache. Я получил пару различных исключений, которые пробовали это, например: 'Server execution failed и 'Call was rejected by callee'. Хотя он работает в оболочке django (конечно).

Кто-нибудь видел эти ошибки и нашел разрешение? Спасибо за любую помощь!

ответ

0

И это обходной путь, не говоря уже о дрянной, но он выполнит эту работу, пока не появится лучшее решение.

Сначала я создал custom command, который может быть вызван из manage.py как это не выполняется с сервера Apache (который далее говорит мне о том, что система не распознает Apache в качестве действительного пользователя для автоматической генерации электронной почты, безусловно, есть способ скажите системе «все в порядке»).

После этого я создал задачу в планировщике задач Windows для запуска каждые 30 минут (чего будет достаточно для цели). Действие:

Start a program C:\python27_32\python.exe C:\www\myproject\manage.py send_email 

MYAPP/Управление/Команды/send_email.py

from django.core.management.base import BaseCommand 
from myapp.util.gen_email import AutoEmail #custom code to generate email via win32com 
from myapp.models import MyModel 

class Command(BaseCommand): 
    def __init__(self, *args, **kwargs): 
     super(Command, self).__init__(*args, **kwargs) 
     items = MyModel.objects.filter(status__in=['status_a','status_b']) 
     if items: 
      self.send_proc_email() 

    def send_proc_email(self): 
     subject = 'There are new items to process' 
     to = '[email protected]' 
     message = '' 
     email = AutoEmail(subject, message, to) 

    def handle(self, *args, **kwargs): 
     pass 

далеко от оптимального, я знаю, но эй, если он работает ...

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