2016-10-05 84 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