2015-11-19 24 views
0

因此,我們約有50,000名已註冊每週通訊的用戶。這封電子郵件的內容是爲每個用戶個性化的,但這不是一封羣發郵件。從Rails發送每週新聞郵件的策略

我們正在使用Rails 4和Mandrill。

現在我們每次要發射這個emails.rake任務需要大約12個小時,我正在尋找一種分配時間或縮短時間的方法。

我可以用來改善這個時間的一些技巧是什麼?

我正在考慮使用mandrill模板,只是發送json對象到mandrill,讓他們從他們的最後發送電子郵件,但我不確定這是否會幫助提高速度。

在50,000+級別:我如何保持電子郵件發送時間的可管理性?

+1

增加處理後臺作業的進程數量。他們可以並行工作。 – Swards

+0

我正在使用'UserMailer.delay.weekly_email(user)',但是我仍然看到每個電子郵件大約7秒鐘,並且它們被同步發送。你有沒有另外一種方法可以解決這個問題? –

+0

您是否需要爲每個電子郵件發送一個JSON對象,或者將mandrill接受多個電子郵件的JSON? –

回答

0

您需要查看Mandrill上的合併標籤。它允許您爲每個電子郵件定義自定義內容。因此,您可以將發送給Mandrill的通訊發送到更少的API調用,而不是每個電子郵件發送1次。調用次數將取決於您的數據大小,因爲我確信可能有限制。

您只需創建一個模板,並把在合併瓦爾如* | custom_content_placeholder | **只要您需要用戶特定的內容放置。您可以在系統中執行此模板並將其傳遞到消息中,或者您可以在Mandrill中設置它,並調用該模板。

當您的山魈API調用來發送電子郵件或電子郵件模板你只是附加的JSON數據,如:

"message": { 
     "global_merge_vars": [ 
      { 
       "name": "global_placeholder", 
       "content": "Content to replace for all emails" 
      } 
     ], 
     "merge_vars": [ 
      { 
       "rcpt": "[email protected]", 
       "vars": [ 
        { 
         "name": "custom_content_placeholder", 
         "content": "User specific content" 
        }, 
        { 
         "name": "custom_content_placeholder2", 
         "content": "More user specific content" 
        } 
       ] 
      }, 
      { 
       "rcpt": "[email protected]", 
       "vars": [ 
        { 
         "name": "custom_content_placeholder", 
         "content": "User2 specific content" 
        }, 
        { 
         "name": "custom_content_placeholder2", 
         "content": "More user2 specific content" 
        } 
       ] 
      } 
     ], 

你可以找到關於合併的標籤在這裏更多的信息:

https://mandrill.zendesk.com/hc/en-us/articles/205582487-How-to-Use-Merge-Tags-to-Add-Dynamic-Content

如果您熟悉模板的車把,Mandrill現在可以使用合併標籤支持它:

http://blog.mandrill.com/handlebars-for-templates-and-dynamic-content.html

1

看起來你可以使用MailyHerald。它是管理應用程序電子郵件的Rails創業板。它使用Sidekiq工作線程在後臺發送個性化電子郵件,這應該可以幫助您提高性能。

MailyHerald有一個漂亮的Web UI,並用電子郵件服務,如亞馬遜SES或山魈工作。