python - email_host - Configurado incorrectamente: configuración solicitada DEFAULT_INDEX_TABLESPACE, pero la configuración no está configurada
send correo django (1)
Estoy tratando de hacer un servidor en vivo SMTP como una aplicación separada en django. Cada vez que intento ejecutar el archivo smtp python smtp.py
para escuchar los mensajes entrantes y almacenarlos en los modelos, aparece el error ImproperlyConfigured.
smtp.py
import os
import smtpd
import asyncore
import datetime
from models import IncomingEmail
from email.parser import Parser
class MessageServer():
def __call__(self, peer, mailfrom, recipients, data):
email = Parser().parsestr(data)
incomingDb = IncomingEmail(
sender=mailfrom, recipient=recipients,
message=data, subject=email[''subject''],
recevied=datetime.datetime.now()
)
incomingDb.save()
class customSMTPServer(smtpd.SMTPServer):
process_message = MessageServer()
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hello.settings")
server = customSMTPServer((''localhost'', 1025), None)
print "Started listening at port 1025"
try:
asyncore.loop()
except KeyboardInterrupt:
server.close()
La estructura del proyecto:
hello/
manage.py
hello/
__init__.py
settings.py
urls.py
wsgi.py
smtp/
smtp.py
models.py
__init__.py
api/
admin.py
apps.py
urls.py
views.py
El error:
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environ
ment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Parece que está obteniendo ese error porque a DB engin le faltan algunas configuraciones importantes. ¿Qué pasa si editas tu código así?
import sys, os
sys.path.append(''/path/to/your/app'')
os.environ[''DJANGO_SETTINGS_MODULE''] = ''hello.settings''
from django.conf import settings
print "Started listening at port 1025"
...
O bien, otra forma es intentar mover os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hello.settings")
en la parte superior de tu archivo (pero después de importar el sistema os
, por supuesto) Otro truco un poco sucio es:
if __name__ == "__main__":
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Lo siguiente que podrías intentar:
$ ./manage.py shell
...
>>> execfile(''your_script.py'')
Además, ¿qué línea arroja y excepción?