djiango- 비동기 전송 메일 --celery

설치

이후 성공적으로 전송 될 수있다 4.2.0에 여러 버전을 시도 셀러리 ==에게 4.2.0 #의 celery4.x 지원을 django1.11 설치 PIP

1. 새 프로젝트 디렉토리 셀러리 패키지 celery_tasks 만들기

 에서 tasks.py

에서 django.conf 가져 오기 설정
 에서 django.core.mail 가져 send_mail 

에서 셀러리 가져 오기 셀러리   #의 가져 오기 셀러리 패킷 #을 만들기 클래스 인스턴스 객체 셀러리 
#의 셀러리 (이름 (일반적으로 작성된 패키지 이름), 중개인 파산) 
응용 프로그램 = 셀러리 ( ' celery_tasks을 .tasks ' , 브로커 = ' 레디 스 : //192.168.199.130 : 2분의 6,379 ' )   # 2는 두 번째 데이터베이스 사용 


#은 작업 기능 정의 
@의 app.task의   #을 장식 필수 
DEF의 send_register_active_email을 (to_email, 사용자 이름, 토큰) :
     # '' '활성화 이메일을 보내' ''
    # 메일 메시지의 구성 
    #을 메일 보내기 
    제목 = ' 매일 신선한 환영 메시지 '   #의 메시지 주제 
    # 메시지 본문 
    #의 참고 : 여기에 html 태그 문자열 출력로서 해석 할 수없는 것입니다 
    # 메시지 = '를 <H1> S % 당신이 매일 등록 된 회원이되도록 환영합니다, 신선한 </ H1> 계정을 활성화하려면 다음 링크를 클릭 : <BR/> <a href="http://192.168.199.130:8000/user/active/%s"> HTTP : //192.168.199.130 : 8000 / 사용자 / 액티브 / S % </a>를 '% (이름, 토큰, 토큰) 
    메시지 = ' 
    발신자 = settings.EMAIL_FROM   # 발송 
    수신기 = to_email]   #에 받는 목록 
    html_message = '<H1> %의, 신선한 </ H1> 계정을 활성화하려면 다음 링크를 클릭 <BR/> <A HREF = "당신은 매일 등록 된 회원이 환영 http://192.168.199.130:8000/user/active/% S "> http://192.168.199.130:8000/user/active/%s </a>를 ' % ( 
    사용자 이름, 토큰, 토큰) 
    인쇄 (html_message)
     # 가까운 send_mail (메시지 제목, 메시지 본문, 보낸 사람, 목록, html_message = HTML 형식의 내용) 누구 
    #의 send_mail (주제, 메시지, 발신자, 수신자) 
    send_mail (주제, 메시지, 보낸 사람, 수신기, html_message = html_message)

라인에보기 2. 가져 오기 기능 작업 패키지

에서 celery_tasks.tasks 가져 오기 send_register_active_email   #의 셀러리 이메일 도입의 방법 

#을 메일 보내기 
# 지연 (받는 사람, 사용자 이름 토큰) 
(이메일, 사용자 이름, 토큰에서) send_register_active_email.delay를   # 대기열에 작업을

3. 시작 레디 스

 

 셀러리 명령 실행

셀러리 -A는 노동자 -l 정보를 celery_tasks.tasks

오류

- : 파이썬 @ 우분투는 ~ / bj19 / ttsx / dailyfresh $ 셀러리 -A는 노동자 celery_tasks.tasks 리터 정보 
: 역 추적 (가장 최근 통화 마지막) 
  파일 " 은 / usr / local / bin / 셀러리 " , 라인 11  <모듈> 
    SYS .exit은 (주 ()) 
  파일 " /usr/local/lib/python3.5/dist-packages/celery/__main__.py " , 라인 16 주요 
    _main () 
  파일 " / usr / 지방 / lib 디렉토리 / python3을. 5 / DIST-패키지 / 셀러리 / 빈 / celery.py " , 라인 (322) 주요 
    cmd.execute_from_commandline (변수는 argv) 
  파일 "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py " , 라인 496 execute_from_commandline 
    슈퍼 (CeleryCommand, 자기) .execute_from_commandline (ARGV))) 
  파일 " 를 / usr / local / lib로 /python3.5/dist-packages/celery/bin/base.py " , 라인 298 execute_from_commandline
     복귀 self.handle_argv (self.prog_name,는 argv [1 :]) 
  파일 " /usr/local/lib/python3.5 /dist-packages/celery/bin/celery.py " , 라인 488 handle_argv의
     반환 self.execute (명령, 변수는 argv) 
  파일 "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py " 라인 (420), 실행 
    ) .run_from_argv (self.prog_name,는 argv [ 1] = 명령어 는 argv [0]) 
  파일 " /usr/local/lib/python3.5/dist-packages/celery/bin/worker.py " , 라인 (223) run_from_argv의
     반환 자체 (* 인수, ** 옵션) 
  파일 " / usr / 지방 / lib 디렉토리 / python3.5 / DIST-패키지 / 셀러리 / 빈 / base.py " , 라인 252  __call__ 
    RET = self.run (* 인수, ** kwargs로) 
  파일 "/usr/local/lib/python3.5/dist-packages/celery/bin/worker.py " 라인 257, 에서 실행
     ** kwargs로는) 
  파일 " /usr/local/lib/python3.5/dist-packages/ 셀러리 / 노동자 / worker.py " , 라인 (101)  __init__ 
    self.setup_instance ( ** self.prepare_args (** kwargs로는)) 
  파일 " /usr/local/lib/python3.5/dist-packages/celery/worker/ worker.py " , 라인 (124) setup_instance의 
    self.should_use_eventloop () 경우 use_eventloop가 있다 없음 
  파일 "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py " , 라인 243 should_use_eventloop의 
    self._conninfo.transport.implements.asynchronous 
  파일 " / usr / 지방 / lib 디렉토리 / python3. 5 / DIST-패키지 / 다시마 / connection.py " , 라인 871 전송 
    self._transport = self.create_transport () 
  파일 " /usr/local/lib/python3.5/dist-packages/kombu/connection.py " 라인 598 에서 create_transport의
     반환 self.get_transport_cls () (클라이언트 = 자기) 
  파일 "/usr/local/lib/python3.5/dist-packages/kombu/transport/redis.py " , 라인 1039 에서  __init__는 
    인상 (ImportError를을 ' 레디 스 라이브러리를 누락 () 레디 스를 설치 PIP ' ) 
(누락 레디 스 라이브러리 핍 : ImportError를을 레디 스를 설치)

핍은 레디 스를 설치하지 않은 때문이다

설치 구성 요소 레디 스

설치 PIP -U " 셀러리 [레디 스] "

명령을 다시 노크

메일을 보낼 때 오류가 계속

[2019년 9월 25일 17 : 41 : 28,074 : INFO / MainProcess]받은 태스크 : celery_tasks.tasks.send_register_active_email [58be8ac2-4deb-4ca1-809b- 6a88e9a2fc9f]   
[ 2019년 9월 25일 17 : 41 : 28,085 : ERROR / ForkPoolWorker -2] 작업 celery_tasks.tasks.send_register_active_email [58be8ac2-4deb-4ca1-809b-6a88e9a2fc9f]를 제기 예기치 않은 : ImproperlyConfigured ( ' . EMAIL_FROM 설정을 요청하지만, 설정이 구성되지 않은 당신은 환경 변수 DJANGO_SETTINGS_MODULE를 정의해야 하나 또는 (settings.configure 전화 ) 설정에 액세스하기 전에. ' ) 
마지막 역 추적 (가장 최근의 호출) : 
  파일 " /home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py " , 라인 (382) ...에서trace_task 
    R = RETVAL = 재미 (* 인수는, ** kwargs로는) 
  파일 " /home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py " , 라인 641  __protected_call__ 
    반환 self.run을 (** * 인수, kwargs로는) 
  파일 " /home/python/bj19/ttsx/dailyfresh/celery_tasks/tasks.py을 " , 라인 24 에서 send_register_active_email 
    보낸 = settings.EMAIL_FROM   # 发件人 
  파일 " / 집 /python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py " , 라인 (48)  __getattr__ 
    self._setup (이름) 
  파일 " /home/python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py " , 라인 (42) _setup의
     % (내림차순, 환경 변수 _)) 
django.core.exceptions.ImproperlyConfigured : EMAIL_FROM 설정을 요청하지만, 설정이되어 있지 구성. 당신은 환경 변수 DJANGO_SETTINGS_MODULE를 정의해야 하나 또는 설정에 액세스하기 전에 () settings.configure를 호출합니다.

장고 인해 초기화되지 않았습니다

tasks.py 초기화 파일에서

가져 오기 운영 체제
 가져 오기 장고 
os.environ.setdefault ( " DJANGO_SETTINGS_MODULE는 " , " dailyfresh.settings " )   #은 이상에 wsgi.py 복사 
) (django.setup

시험은 다시 성공적으로 전송

추천

출처www.cnblogs.com/yifengs/p/11586380.html