2015-01-14 2 views
1

어, 나는 지금까지 온라인으로 찾을 수 있었지만 아무 소용이 없는지 여러 가지 방법을 시도했습니다. 내 주요 목표는 개인 LAN에서 장고 기반 웹 응용 프로그램의 전자 메일을 보내는 것입니다. 나는 그것이 ... 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)입니다. 따라서 주소가 제공되지 않는다고 말하는 이유를 알 수 없습니다.

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를 통해 메일을 전송 시도 내가 django-smtp-ssl.py을 발견하고 내 설정에 다음을 추가 설치 한 후 때이다 Apache를 사용하는 프로덕션 환경. 나는 이것을 시도하는 몇 가지 다른 예외 (예 : 'Server execution failed'Call was rejected by callee')를 받았습니다. 그것은 장고 껍질에서 작동하지만 (물론).

이러한 오류를보고 해결책을 찾은 사람이 있습니까? 어떤 도움을 주셔서 감사합니다!

답변

0

그리고 해결 방법이있어 놀랍지는 않지만, 더 나은 해결책이 제시 될 때까지 작업을 완료 할 수 있습니다.

처음에는 manage.py에서 호출 할 수있는 custom command을 만들었습니다.이 파일은 Apache 서버에서 실행되지 않으므로 (시스템에서 Apache를 자동 이메일 생성의 유효한 사용자로 인식하지 못한다고 알려줍니다. 시스템에 "괜찮습니다"라고 말하십시오).

그 다음에는 Windows 작업 스케줄러에서 30 분마다 실행되도록 작업을 만들었습니다 (목표에 충분 함). 작업 : 멀리 최적, 나도 알아,하지만 헤이 작동하는지 ...

에서

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 

send_email.py

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

의 MyApp/관리/명령 /

관련 문제