2016-10-05 106 views
0

我有一個應用程序發送電子郵件通知。有些用戶提到他們沒有收到通知。Rails&Mailgun:電子郵件不發送

NotificationMailer.rb:

def send_daily_digest(user_id) 
     @user = User.find(user_id) 
     mail(to: @user.email, subject: "#{@jobs.count} new jobs yesterday") 
     mail(to: "[email protected]", subject: "TEST #{@jobs.count} new jobs yesterday for #{@user.email}") 
    end 

我的電子郵件地址是[email protected]和我收到的電子郵件。我檢查了Mailgun日誌,而另一個(非管理員)電子郵件未被髮送。

這可能是什麼原因造成的?

編輯:我只是做了如下改變:

def send_daily_digest(user_id) 
      @user = User.find(user_id) 
      @recipients = [] 
      @recipients << @user.email 
      @recipients << [email protected] 
      mail(to: @recipients, subject: "#{@jobs.count} new jobs yesterday") 
     end 

做出這樣的轉變正確發送了電子郵件給受援國。所以也許這與不被允許有兩個單獨的mail_to動作有關?

我現在的問題是這兩個收件人在電子郵件上都是CC。我希望電子郵件是分開的,並直接給每個用戶。我怎樣才能做到這一點?

+0

您是否檢查過其他電子郵件地址是否未被封鎖? 如果您恰好將電子郵件發送到測試地址,被拒絕的地址可能被Railgun阻止。 – Lomefin

+0

嗨@Lomefin看我的編輯。另一個地址未被阻止。我剛剛證實了這一點。 –

回答

0

/config/environments/development.rb

config.action_mailer.raise_delivery_errors = false 
    config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
     :authentication => :plain, 
     :address => "smtp.mailgun.org", 
     :port => 587, 
     :domain => "you domain in https://mailgun.com/app/", 
     :user_name => "you user_name in https://mailgun.com/app/", 
     :password => "you password in https://mailgun.com/app/" 
    } 
+0

嗯..是的,我有適當的設置,因爲我的電子郵件發送到我的第一個地址 –

+0

也許而不是設置raise_delivery_errors爲false,您可以將它們設置爲true,以便我們可以驗證是否有任何問題發送導軌內第一封郵件。 – Lomefin

0

按照Rails Docs about ActionMailer郵件的方法是創建消息並呈現電子郵件模板的主要方法。

這意味着相當於ActionController#render,因此也許它只是將郵件發送到由郵件方法調用的最後一個收件人。

所以也許你應該做的是將交付邏輯移動到控制郵件程序的對象。

例如我稱這些對象調度員。

class ClientDispatcher 
    def self.dispatch_digests 
    Clients.all.each do |client| 
     DigestMailer.send_daily_digest(client).deliver_later 
     DigestMailer.send_daily_digest("[email protected]").deliver_later 
    end 
    end 
end