【Django】celery收到發送郵件任務沒反應(無限等待)- 阿里雲ECS-CentOS7

一、起因:celery收到發送郵件任務沒反應(無限等待)- 阿里雲ECS-CentOS7

最近用阿里雲部署Django項目,用celery處理髮送郵件任務,celery服務已經啓動,能Received task,但是收到任務後無限等待,沒有進行Task xxx succeeded in.

  1. 我一直以爲是celery沒有配置好的問題,百度各種無果
    以爲是代碼問題?看了又看,沒問題啊、、、以爲是 時區問題?AsiaShanghai? 沒有效果。。。。。。

  2. 嘗試放棄celery,開啓一個線程去處理髮送郵件的任務,發現線程一直在等待處理任務???那麼就不是celery的問題了,是發送郵件的問題。

原來是如此,這damn的親愛的阿里雲25端口給禁用了,導致無法發送郵件!!!

二、解決無法發送郵件的問題

Django項目的settings.py文件添加代碼:

''' 阿里雲Django郵件服務器配置 '''
# 其他配置不變,修改:
DEFAULT_FROM_EMAIL = '[email protected]'	# 默認郵件發送方:和發送郵箱的用戶名相同
EMAIL_PORT = 465	# 修改Email端口爲465或587,二選一,用不了換另一個
EMAIL_USE_SSL = True	# 使用SSL
# EMAIL_USE_TSL = False		# 禁用TSL

配置之後,再次嘗試!!!

啓動發送郵件的celery任務

Linux啓動celery任務

celery -A celery_tasks.tasks worker -l info

Windows啓動celery任務

celery -A celery_tasks.tasks worker -l info -P eventlet

發送郵件測試

在項目路徑下輸入python3,進入python3交互環境。

[root@banana ~]# cd 你的項目路徑
[root@banana 你的項目路徑]# python3

>>> from celery_tasks.tasks import send_register_active_email
>>> to_email = '[email protected]'
>>> username = 'helloworld'
>>> token = 'thistoken'
>>> send_register_active_email.delay(to_email, username, token)
<AsyncResult: e5122c2a-75b9-4b6a-bccf-650f5e8c41f2>

測試成功!

[2020-06-01 13:37:46,114: INFO/ForkPoolWorker-1] Task celery_tasks.tasks.send_register_active_email[c43f36a7-3c41-45a0-bac0-18b059c5ccdb] 
succeeded in 3.290678153047338s: None

SSL和TSL的Django文檔

EMAIL_USE_TLS(默認:False)

在與SMTP服務器通信時,是否使用TLS(安全)連接。這用於顯式TLS連接,通常在端口587上。

EMAIL_USE_SSL(默認:False)

在與SMTP服務器通信時,是否使用隱式TLS(安全)連接。在大多數電子郵件文檔中,這種類型的TLS連接稱爲SSL。它通常在端口465上使用。

注意: EMAIL_USE_TLS/EMAIL_USE_SSL 是互斥的,最多隻能設置一個爲True。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章