簡體   English   中英

使用Celery和Amazon SES在Django中安排電子郵件

[英]Schedule emails in Django using Celery and Amazon SES

我發現很難在Django中安排電子郵件。 我一直在互聯網上進行研究,但還未能解決這個問題。 也許你可以幫我解決這個問題,或者至少指出我正確的方向,找出如何做到這一點。

例如,當您使用Mailgun時 ,您可以指定發送如下電子郵件:

def send_scheduled_message():
    return requests.post(
        "https://api.mailgun.net/v2/samples.mailgun.org/messages",
        auth=("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0"),
        data={"from": "Excited User <me@samples.mailgun.org>",
              "to": "bar@example.com",
              "subject": "Hello",
              "text": "Testing some Mailgun awesomness!",
              "o:deliverytime": "Fri, 25 Oct 2011 23:10:10 -0000"})

我希望有類似的Django發送電子郵件,我可以指定一個交付時間,就像在前一種情況下。

到目前為止,我已經安裝了django-SES ,我可以通過Amazon SES發送電子郵件。 我也安裝了Celery並且曾經也有django-celery,但似乎不再需要從Celery 3.1開始。

總而言之,我如何使用send_mail告訴Celery等待特定日期和時間將電子郵件發送到django-SES以便他們按時交付?

謝謝你的幫助!

編寫Python腳本並安排cron作業:)為什么應用程序服務器需要了解電子郵件工作? 如果是,請通過具有ACID合規性的共享數據存儲進行通知。

這些想法被封裝在一個非常好的架構實踐中, 即機制與策略的分離

基本上我們有以下幾點:

  1. 該機制可以是數據庫,策略將是存儲在數據庫中的數據,用於指示電子郵件的發送時間和發送時間。
  2. 下一個機制是python腳本,策略是python腳本中的代碼。 這應該至少做好工作,並指出失敗或成功。
  3. 第三個是“cronjob”,其中發送時間的策略包含在crontab中,而機制是讀取crontab並觸發效果的cron守護程序。

當然,有時候不能完全分離,但是部分分離比緊密耦合更好。 最好的部分是這些中的每一個也彼此分離(大多數情況下,除了可能通過互聯網或操作系統)。

對於一些復雜的問題,芹菜是一個非常大的錘子,應該避免使用大錘子恕我直言。 Django在某種程度上也是一個大錘子,它解決了許多更簡單的問題,但是以一種適合一大群人的方式(我認為它試圖解決的真正問題,但你必須判斷或者不是適合當前工作的合適工具)。

一旦你完成了上面的步驟,每個步驟都是一項非常直接的任務,你將擁有一個很好的解決方案,它在各個部分都很容易理解,因此很容易修改,擴展和替換。

基本上,我同意Derek Litz的回答。 但是,根據您的要求,您可能希望查看使用cron + Django管理命令。 如果這是一個非常簡單的基於文本的電子郵件,那么我可能會選擇Derek的解決方案。 但是,如果電子郵件是基於HTML的,或者需要為每個用戶提供動態,那么我可能會利用django模型和模板引擎的強大功能。 我經常這樣做,而且效果很好。

暫無
暫無

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

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