簡體   English   中英

在 Django 中發送異步郵件 - 不寫入數據庫?

[英]Sending Asynchronous Mail in Django - without writing to database?

我希望通過異步發送我的郵件來加快我網站的加載時間。 目前,我的代碼如下所示:

def myFunction(content):
   result = modify(content)
   send_mail('My Subject', result, 'me@example.com')
   return render(request, 'page.html', result)

使用Django-Mailer ,我發現我可以通過將電子郵件寫入數據庫而不是立即發送來減少加載時間,然后讓 cron + Django 郵件程序異步處理我數據庫中的電子郵件。

但是,我希望我的數據庫盡可能遠離潛在的敏感信息,並希望避免將通過我的應用程序發送的任何電子郵件寫入我的數據庫。 即使數據只是被寫入很短的時間,自動備份也有可能保存一些東西。

我知道這里是否沒有解決方案,但是有沒有辦法異步發送電子郵件而不必每次都將它們寫入數據庫? 我真的不認為這是可能的,但我的理想希望是,如果有一種方法可以返回響應,然后發送電子郵件。

def myFunction(content):
   result = modify(content)
   return render(request, 'page.html', result)
   send_mail('My Subject', result, 'me@example.com')

Django-After-Response似乎做到了這一點,但自 2015 年以來一直沒有更新。

這個答案這個答案也提供了潛在的解決方案。

你有幾個選擇。 一種方法是擁有一個任務隊列和一個執行這些任務的工作人員。

我喜歡使用 Django-RQ https://github.com/rq/django-rq ,但 Celery 是另一個不錯的選擇。 盡管有了這個,您將需要運行一個工作實例以及存儲隊列的東西,例如 Redis。

對於更簡單快捷的解決方案,我建議嘗試 django-background-tasks: https : //django-background-tasks.readthedocs.io/en/latest/#這個將任務隊列存儲在數據庫中,但它會處理它所以你不必自己實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM